충돌하는 postgresql 설치 정리

충돌하는 postgresql 설치 정리

나는 Debian 8.5로 업그레이드한 작은 개발 상자를 가지고 있습니다(현재 Apache와 Postgres를 갖고 프로덕션 서버에 더 잘 맞도록). 이제 Postgres 9.1(이전)과 9.4(사용하고 싶은)가 있습니다.

$ systemctl | grep postgres
 postgresql.service            loaded active exited    PostgreSQL RDBMS
 [email protected]   loaded failed failed    PostgreSQL Cluster 9.1-main
 [email protected]   loaded active running   PostgreSQL Cluster 9.4-main
 system-postgresql.slice       loaded active active    system-postgresql.slice

PostgreSQL 9.4 서비스는 비표준 포트 5433에서 서비스하도록 자동으로 설정되었습니다. 이제 이를 변경했습니다. 물론 두 가지를 동시에 실행할 수는 없습니다. 나는 두 가지 버전을 실행하고 싶지 않습니다. PostgreSQL 9.4가 기존 데이터베이스를 제공하기를 원합니다.

다음과 같이 복원하여 데이터베이스를 다시 사용할 수 있게 만들 수 있습니다.

$ systemctl stop [email protected]
$ systemctl start [email protected]

이를 통해 데이터베이스를 복원할 수 있었지만 물론 오래된 데이터베이스 엔진을 사용했습니다.

이 엉망진창을 어떻게 청소합니까? 데이터 손실 없이 버전 9.1을 제거할 수 있습니까? 아니면 데이터베이스를 내보내고 다시 만들어야 합니까? 시스템 데이터베이스( 등) postgres은 어떻습니까 template1?

답변1

약간의 어려움 끝에 나는 이것을 발견했습니다.

가지다문서에 언급된 두 가지 주요 가능성:

  1. pg_dumpall이전 서비스에서 데이터를 내보내고 psql새 서비스로 가져오는 데 사용됩니다 .
  2. 사용 pg_upgrade.

내 조언: 이렇게 하지 말아야 할 특별한 이유가 없는 한 다음을 사용하세요 pg_dumpall.

  1. 이전 데이터베이스 서비스에서 모든 것을 내보내십시오(또는 pg_dumpall새 버전이 설치된 경우 새 바이너리를 사용하십시오).
  2. 새 데이터베이스 서비스에서 모든 것을 가져옵니다.
  3. 이전 데이터베이스 서비스를 중지합니다.
  4. 새 버전에 대한 구성을 postgresql.conf모두 변경했는지 확인하세요. pg_hba.conf필요한 경우 새 서비스를 다시 시작하세요.
  5. 애플리케이션이 여전히 작동하는지 테스트합니다.
  6. 이전 버전을 제거하십시오.

내 경우에는 ( -p <Port>적절하게 사용):

sudo -s -u postgres
cd /tmp/
pg_dumpall -p 5433 > all.sql
psql -f all.sql

그리고 다음과 같이 root:

systemctl stop [email protected]
vimdiff /etc/postgresql/9.{1,4}/main/postgresql.conf
vimdiff /etc/postgresql/9.{1,4}/main/pg_hba.conf
systemctl restart [email protected]
apt-get remove postgresql-client-9.1 postgresql-9.1

pg_upgrade방법을 사용하려면 다음을 찾아 지정해야 합니다.

  • 이전 및 새 데이터 디렉터리(예 grep data_directory /etc/postgresql/9.{1,4}/main/postgresql.conf: )
  • 이전 바이너리와 새 바이너리에 대한 디렉터리(예 dpkg --listfiles postgresql-9.1 | grep '/bin$': )
  • postgres사용자가 쓸 수 있는 디렉터리에서 시작 해야 합니다 .

...그래도 여전히 작동하지 않을 수 있습니다(예를 들어pg_upgrade가 지정되지 않은 오류로 인해 실패합니다.).

관련 정보