Discourseを/var/discourse上のスタンドアロンDockerコンテナで実行しています。
内蔵の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のデータを復元するのではなく、アップグレードされたクラスタを復元することを望んでいます。