私は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 でサービスするように自動的に設定されました。これでこれを変更しました。もちろん、両方を同時に実行することはできません。私は2つのバージョンを実行したくありません。 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が指定されていないエラーのため失敗します。)。