Pg_dumpによるリモートPgsqlのバックアップ失敗:ポートとバージョンの違い、利用可能なオプションは?

システムバックアップを実行しようとすると、「バックアップに失敗しました。ログを確認してください。」というエラーが表示されます。

ログには以下のように報告されています:
pg_dump: [archiver (db)] connection to database "discoursedb" failed: could not connect to server: Connection refused

問題点は以下の 2 点ではないかと考えています:

  1. リモートサーバーが非標準ポートで実行されている。
  2. リモートの PostgreSQL が新しい PSQL バージョンで実行されている。

アプリにログイン(/var/discourse/launcher enter app)して手動でバックアップを実行したところ、ポート定義なしで実行すると、最初と同じエラーが発生することがわかりました:

$ pg_dump -h 123.456.789.101 -U username -W -F t discourse_db > discourse_db_backup.tar
Password:
pg_dump: [archiver (db)] connection to database "discourse_db" failed: could not connect to server: Connection refused
	Is the server running on host "123.456.789.101" and accepting
	TCP/IP connections on port 5432?

これは簡単に解決できました(ただし、Discourse に適切なポートを使用してバックアップさせる方法がわかりません)。しかし、次の問題はより深刻でした。データベースサーバー側で新しいバージョンの PSQL を使用していることです:

$ pg_dump -h 123.456.789.101 -p 45678 -U username -W -F t discourse_db > discourse_db_backup.tar
Password:
pg_dump: server version: 11.5 (Ubuntu 11.5-3.pgdg18.04+1); pg_dump version: 10.10 (Debian 10.10-1.pgdg100+1)
pg_dump: aborting because of server version mismatch

このような状況でどのような対応が可能でしょうか?システムバックアップを正常に動作させる方法はありますか、それとも Discourse と PostgreSQL データベースは個別にバックアップする必要がありますか?

後者が唯一の選択肢である場合、少なくともデータをバックアップする適切な方法は何ですか?また、新しいスクリプトを作成することなく、両方を同時にバックアップするための推奨される統合メカニズムは存在しますか?

別の投稿で、少し似た状況の方がいるという議論を見つけました こちら。私の場合の大きな違いは、ファイルを S3 ではなくローカルサーバーに保存している点です。PostgreSQL のバックアップは独立して行われているため、これを省略することも可能ですが、以下の項目のバックアップは依然として必要です:

  • ローカルコンテンツ
  • Discourse の設定

データベース、コンテンツ、設定をすべて 1 か所にまとめた統合バックアップが理想ですが、それがサポートされていない(またはされない)可能性が高いと考えられます。そのため、少なくともコンテンツと設定を 1 つのパッケージにまとめることを実現したいと考えています。

Postgres 11 はサポートされていません。バージョン間の復元方法については他を参照できますが、Discourse を pg11 で動作させるには多少の手間がかかります。

興味深くて奇妙ですね。どこかで「11 は問題ない」と読んだ記憶がありますが、それ aside として、すでに 11 にデプロイされたシステムを持っており、バックアップを除いてこれまでエラーや問題は一切見ていません……でも、これであなたが心配してくれているなら……

あ、これだ。この投稿によると、PostgreSQL 11 は「そのまま動くはずです」。

はい。pg11 上に 2 つのシステムをデプロイしています。バックアップを直接実行していることを除けば、問題なく動作しています。コンテナ内で pg を 11 にアップグレードしました。バックアップは作成されますが、リストアは行われません。

Discourse のバックアップシステムは、PostgreSQL のバージョン不一致が発生した場合は失敗するのではなく、単に警告を表示するべきです。私も外部の PG サーバーを使用しているため、自分でバックアップを作成しようとしたところ、tarball が一切作成されませんでした。

同じ問題が私にも発生しました。PostgreSQLデータベースを別のサーバーに移動したところ、バックアップエラーが発生するようになりました。メインサーバーのDockerでPostgreSQLを削除して再インストールすることで解決策を見つけました。

cd /var/discourse
./launcher enter app
apt-get remove postgresql-client-common
apt-get update
sudo apt-get install postgresql

詳細: Discourse yedekleme pg_dump hatası ve çözümü: pg_dump: error: server version: 12|13|14|15|*; pg_dump version: 12|13|14|15|* - Veritabanı Yönetim Sistemleri - Soru Cevap