私は /var/discourse に単一の Docker コンテナとして Discourse を実行しています。
組み込まれた PostgreSQL データベースをバージョン 15 から 18 へアップグレードしようとしたところ、アップグレードは完了したように見えますが、アクティブなデータディレクトリは現在以下のように報告しています:
/shared/postgres_data/PG_VERSION
18
しかし、再構築した Discourse コンテナには依然として PostgreSQL 15 のバイナリのみが含まれています:
/usr/lib/postgresql/15/bin/postgres
postgres (PostgreSQL) 15.18
PostgreSQL サービスは以下のように設定されています:
/usr/lib/postgresql/15/bin/postmaster -D /etc/postgresql/15/main
一方、実際の Discourse データディレクトリは以下にマウントされています:
/shared/postgres_data
その結果、PostgreSQL は以下のエラーで失敗します:
FATAL: database files are incompatible with server
DETAIL: The data directory was initialized by PostgreSQL version 18,
which is not compatible with this version 15.18
(Debian 15.18-1.pgdg12+1).
最近の Discourse Docker イメージには PostgreSQL 18 のバイナリが含まれているはずだと理解しています。app.yml を変更して PostgreSQL 18 テンプレートを使用し、アプリを再構築しましたが、生成されたコンテナには依然として PostgreSQL 15 のバイナリが含まれており、サービススクリプトもまだ /etc/postgresql/15/main を指しています。
現在のサービス設定の関連部分は以下の通りです:
HOME=/var/lib/postgresql USER=postgres exec thpoff \
chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert \
/usr/lib/postgresql/15/bin/postmaster -D /etc/postgresql/15/main
私の質問は以下の通りです:
-
PostgreSQL 18 のバイナリが実際に含まれるように、Discourse コンテナを再構築または更新する正しい方法は何か?
-
app.ymlで使用するべき特定のテンプレートやイメージタグはあるか? -
PostgreSQL 18 が利用可能になった後、既存の
/shared/postgres_dataディレクトリに対して起動するためのサポートされている手順は何か?
PostgreSQL 18 のデータディレクトリを削除したり再初期化したりしていません。古い PostgreSQL 15 のデータを復元するのではなく、アップグレードされたクラスタを回復したいと考えています。