[postgresql] 데이터를 잃지 않고 PostgreSQL을 버전 9.6에서 버전 10.1로 업그레이드하는 방법은 무엇입니까?

Ruby on Rails 애플리케이션 (Mac OS X 10.9)에 PostgreSQL 데이터베이스를 사용하고 있습니다.

PostgreSQL 데이터베이스를 업그레이드하는 방법에 대한 자세한 지침이 있습니까?

데이터베이스의 데이터를 파괴하거나 엉망으로 만들 것 같습니다.



답변

자가 추출을 사용하여 Postgres를 설치 및 업그레이드했다고 가정하면 다음 단계를 수행 할 수 있습니다.

  1. 현재 Postgres 서버를 중지하십시오.

    launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  2. 새 10.1 데이터베이스를 초기화하십시오.

    initdb /usr/local/var/postgres10.1 -E utf8

  3. 실행 pg_upgrade (참고 : 아래 이외의 버전에서 업그레이드하는 경우 bin 버전 변경) :

    pg_upgrade -v \
        -d /usr/local/var/postgres \
        -D /usr/local/var/postgres10.1 \
        -b /usr/local/Cellar/postgresql/9.6.5/bin/ \
        -B /usr/local/Cellar/postgresql/10.1/bin/

    -v 자세한 내부 로깅을 활성화하려면

    -d 이전 데이터베이스 클러스터 구성 디렉토리

    -D 새로운 데이터베이스 클러스터 구성 디렉토리

    -b 이전 PostgreSQL 실행 파일 디렉토리

    -B 새로운 PostgreSQL 실행 파일 디렉토리

  4. 새 데이터를 제자리로 이동 :

    cd /usr/local/var
    mv postgres postgres9.6
    mv postgres10.1 postgres
  5. Postgres를 다시 시작하십시오.

    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  6. /usr/local/var/postgres/server.log세부 사항을 점검 하고 새 서버가 올바르게 시작되었는지 확인하십시오.

  7. 마지막으로 레일 pg젬을 다시 설치하십시오.

    gem uninstall pg
    gem install pg

좌절을 최소화하기 위해 위의 단계에서 수행하는 작업을 정확하게 이해 하려면 PostgreSQL 설명서 를 읽는 것이 좋습니다 .


답변

위의 모든 대답에도 불구하고 여기 5 센트가갑니다.

모든 OS 및 모든 postgres 버전에서 작동합니다.

  • 실행중인 postgres 인스턴스를 중지하십시오.
  • 새 버전을 설치하고 시작하십시오. 새 버전에도 연결할 수 있는지 확인하십시오.
  • 이전 버전의 변경 postgresql.conf-> port에서 54325433;
  • 이전 버전의 postgres 인스턴스를 시작하십시오.
  • 터미널과 cd새 버전 bin폴더 를 엽니 다 .
  • 운영 pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
  • 이전 postgres 실행 인스턴스를 중지하십시오.

답변

우분투 사용자를 위한 솔루션은 다음과 같습니다.

먼저 postgresql을 중지해야합니다

sudo /etc/init.d/postgresql stop

/etc/apt/sources.list.d/pgdg.list라는 새 파일을 만들고 아래 행을 추가하십시오

deb http://apt.postgresql.org/pub/repos/apt/ utopic-pgdg main

아래 명령을 따르십시오

wget -q -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-9.4
sudo pg_dropcluster --stop 9.4 main 
sudo /etc/init.d/postgresql start

이제 우리는 모든 것을 가지고 있습니다. 아래와 같이 업그레이드해야합니다.

sudo pg_upgradecluster 9.3 main
sudo pg_dropcluster 9.3 main

그게 다야. 대부분 업그레이드 된 클러스터는 포트 번호 5433에서 실행됩니다. 아래 명령으로 확인하십시오.

sudo pg_lsclusters


답변

업데이트 :이 프로세스는 9.5를 11.5 이상으로 업그레이드하는 과정과 동일합니다. 단순히 버전을 반영하도록 명령을 수정 9.6하고 10어디 9.6는 IS 이전 버전과 10는 IS 새로운 버전. “old”및 “new”디렉토리도 적절히 조정하십시오.


방금 Ubuntu에서 PostgreSQL 9.5를 9.6으로 업그레이드했으며 인식해야 할 OS / 패키지 관련 뉘앙스가 몇 가지 있으므로 결과를 공유한다고 생각했습니다.

( 데이터를 수동으로 덤프하고 복원하고 싶지 않았으므로 여기에있는 다른 답변 중 일부는 실행 가능하지 않았습니다.)

요컨대, 프로세스는 이전 버전 (예 : 9.5 및 9.6)과 함께 새 버전의 PostgreSQL을 설치 한 다음 https://www.postgresql.org/의pg_upgrade 일부에 설명 된 바이너리 를 실행하는 과정으로 구성됩니다. docs / 9.6 / static / pgupgrade.html .

유일한 “까다로운”측면은 pg_upgrade인수에 대한 올바른 값을 전달하지 않거나 cd명령을 실행하기 전에 올바른 사용자 또는 올바른 위치에 로그인하지 못하면 암호 오류 메시지가 발생할 수 있다는 것입니다.

우분투 (아마도 데비안)에서 “공식”저장소를 사용 deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main하고 기본 파일 시스템 경로 나 런타임 옵션을 변경하지 않은 경우 다음 절차를 수행해야합니다.

새 버전을 설치하십시오 ( 9.6명시 적으로을 지정 함 ).

sudo apt install postgresql-9.6

설치가 완료되면 두 버전이 나란히 실행되지만 다른 포트에서 실행됩니다. 설치 결과는 아래에 언급되어 있지만 간과하기 쉽습니다.

Creating new cluster 9.6/main ...
  config /etc/postgresql/9.6/main
  data   /var/lib/postgresql/9.6/main
  locale en_US.UTF-8
  socket /var/run/postgresql
  port   5433

두 서버 인스턴스를 모두 중지하십시오 (동시에 둘 다 중지됨).

sudo systemctl stop postgresql

전용 PostgreSQL 시스템 사용자로 전환하십시오.

su postgres

그의 홈 디렉토리로 이동하십시오 (실패하면 오류가 발생 함).

cd ~

pg_upgrade 다음 입력이 필요 합니다 ( pg_upgrade --help이것을 알려줍니다).

When you run pg_upgrade, you must provide the following information:
  the data directory for the old cluster  (-d DATADIR)
  the data directory for the new cluster  (-D DATADIR)
  the "bin" directory for the old version (-b BINDIR)
  the "bin" directory for the new version (-B BINDIR)

이러한 입력은 “긴 이름”으로 지정되어보다 쉽게 ​​시각화 할 수 있습니다.

  -b, --old-bindir=BINDIR       old cluster executable directory
  -B, --new-bindir=BINDIR       new cluster executable directory
  -d, --old-datadir=DATADIR     old cluster data directory
  -D, --new-datadir=DATADIR     new cluster data directory

또한 --new-options실패하면 다음과 같은 결과가 발생하므로 스위치를 통과해야합니다 .

connection to database failed: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/lib/postgresql/.s.PGSQL.50432"?

이 스위치가 없으면 기본 구성 옵션이 적용되어 잘못된 연결 옵션이 사용되어 소켓 오류가 발생하기 때문에 발생합니다.

PostgreSQL 버전 pg_upgrade에서 명령을 실행하십시오 .

/usr/lib/postgresql/9.6/bin/pg_upgrade --old-bindir=/usr/lib/postgresql/9.5/bin --new-bindir=/usr/lib/postgresql/9.6/bin --old-datadir=/var/lib/postgresql/9.5/main --new-datadir=/var/lib/postgresql/9.6/main --old-options=-cconfig_file=/etc/postgresql/9.5/main/postgresql.conf --new-options=-cconfig_file=/etc/postgresql/9.6/main/postgresql.conf

전용 시스템 사용자 계정에서 로그 아웃하십시오.

exit

이제 업그레이드가 완료 되었지만 새 인스턴스가 포트에 바인드 5433되므로 (표준 기본값은 5432) 새 인스턴스를 “중단”하기 전에 테스트하려는 경우이 점을 명심하십시오.

서버를 정상적으로 시작하십시오 (이전 인스턴스와 새 인스턴스가 모두 시작됨).

systemctl start postgresql

새 버전을 기본값으로 설정하려면 효과적인 구성 파일 (예 :)을 편집 /etc/postgresql/9.6/main/postgresql.conf하고 포트가 다음과 같이 정의되어 있는지 확인해야합니다.

port = 5432

이 작업을 수행 5433하는 경우 서비스를 시작하기 전에 이전 버전의 포트 번호를 동시에 변경하거나 이전 버전을 제거하십시오 (실제 데이터베이스 내용이 제거 되지않으므로 사용해야합니다).apt --purge remove postgresql-9.5 일이 그것에 대해 ) :

apt remove postgresql-9.5

위의 명령은 모든 인스턴스를 중지하므로 다음을 사용하여 마지막으로 새 인스턴스를 시작해야합니다.

systemctl start postgresql

마지막으로, pg_upgrade좋은 조언 을 고려해야합니다 .

Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade so,
once you start the new server, consider running:
    ./analyze_new_cluster.sh

Running this script will delete the old cluster's data files:
    ./delete_old_cluster.sh


답변

homebrew 및 homebrew 서비스를 사용하는 경우 다음을 수행 할 수 있습니다.

brew services stop postgresql
brew upgrade postgresql
brew postgresql-upgrade-database
brew services start postgresql

고급 postgres 기능을 사용하는 경우 이것이 완벽하게 작동하지 않을 수도 있지만 완벽하게 작동했습니다.


답변

사용자 설명서는 깊이에서이 주제를 다룹니다. 당신은 할 수 있습니다 :

  • pg_upgrade그 자리에서; 또는

  • pg_dump그리고 pg_restore.

의심스러운 경우 덤프로 처리하십시오. 오래된 데이터 디렉토리를 삭제하지 마십시오. 문제가 생길 경우를 대비하여 실수하십시오 / 실수합니다. 그렇게하면 변경되지 않은 9.3 설치로 돌아갈 수 있습니다.

자세한 내용은 설명서를 참조하십시오.

갇혀 있다면 어떻게 갇혀 있는지, 어디서, 무엇을 먼저 시도했는지 설명하는 자세한 질문을 게시하십시오. (다행히도) OS X 용 PostgreSQL의 여러 “분배”가 있기 때문에 PostgreSQL 설치 방법에 따라 다릅니다. 따라서 해당 정보를 제공해야합니다.


답변

이 멍에를 뚫고 지나가는 다른 가난한 생물의 어깨에 서서, 나는 요세미티로 업그레이드 한 후 다음 단계를 따라 돌아와 달릴 수있었습니다.

자가 추출을 사용하여 Postgres를 설치 및 업그레이드했다고 가정하면 다음 단계를 수행 할 수 있습니다.

  1. 현재 Postgres 서버를 중지하십시오.

    launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  2. 새 9.4 데이터베이스를 초기화하십시오.

    initdb /usr/local/var/postgres9.4 -E utf8

  3. postgres 9.3을 설치하십시오 (내 컴퓨터에 더 이상 존재하지 않기 때문에).

    brew install homebrew/versions/postgresql93

  4. Yosemite 업그레이드 중에 제거 된 디렉토리 추가 :

    mkdir -p /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/touch /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/.keep

  5. 실행 pg_upgrade:

    pg_upgrade -v -d /usr/local/var/postgres -D /usr/local/var/postgres9.4 -b /usr/local/Cellar/postgresql93/9.3.5/bin/ -B /usr/local/Cellar/postgresql/9.4.0/bin/

  6. 새 데이터를 제자리로 이동 :

    cd /usr/local/var
    mv postgres postgres9.3
    mv postgres9.4 postgres
  7. Postgres를 다시 시작하십시오.

    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  8. /usr/local/var/postgres/server.log세부 사항을 점검 하고 새 서버가 올바르게 시작되었는지 확인하십시오.

  9. 마지막으로 관련 라이브러리를 다시 설치 하시겠습니까?

    pip install --upgrade psycopg2
    gem uninstall pg
    gem install pg