クラッシュする 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 でサービスするように自動的に設定されました。これでこれを変更しました。もちろん、両方を同時に実行することはできません。私は2つのバージョンを実行したくありません。 PostgreSQL 9.4は既存のデータベースを提供したいと思います。

次のように復元して、データベースを再利用できるようにすることができます。

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

これによりデータベースを復元できましたが、もちろん古いデータベースエンジンを使用しました。

この混乱をどのように掃除しますか?データを失うことなくバージョン9.1を削除できますか?または、データベースをエクスポートして再作成する必要がありますか?システムデータベース(など)postgresはどうですかtemplate1

ベストアンサー1

少し難しさの終わりに、私はこれを見つけました。

持つ文書に記載されている2つの主な可能性:

  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が指定されていないエラーのため失敗します。)。

おすすめ記事