나는 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
약간의 어려움 끝에 나는 이것을 발견했습니다.
pg_dumpall
이전 서비스에서 데이터를 내보내고psql
새 서비스로 가져오는 데 사용됩니다 .- 사용
pg_upgrade
.
내 조언: 이렇게 하지 말아야 할 특별한 이유가 없는 한 다음을 사용하세요 pg_dumpall
.
- 이전 데이터베이스 서비스에서 모든 것을 내보내십시오(또는
pg_dumpall
새 버전이 설치된 경우 새 바이너리를 사용하십시오). - 새 데이터베이스 서비스에서 모든 것을 가져옵니다.
- 이전 데이터베이스 서비스를 중지합니다.
- 새 버전에 대한 구성을
postgresql.conf
모두 변경했는지 확인하세요.pg_hba.conf
필요한 경우 새 서비스를 다시 시작하세요. - 애플리케이션이 여전히 작동하는지 테스트합니다.
- 이전 버전을 제거하십시오.
내 경우에는 ( -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가 지정되지 않은 오류로 인해 실패합니다.).