PostgreSQL 18へのアップグレード後、DiscourseがPostgreSQL 15のバイナリを使い続けた

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

私の質問は以下の通りです。

  1. PostgreSQL 18のバイナリが実際に含まれるように、Discourseコンテナを再構築または更新する正しい方法は何ですか?

  2. app.ymlで使用すべき特定のテンプレートやイメージタグはありますか?

  3. PostgreSQL 18が利用可能になった後、既存の/shared/postgres_dataディレクトリに対して起動するためのサポートされている手順は何ですか?

PostgreSQL 18のデータディレクトリを削除したり再初期化したりしていません。古いPostgreSQL 15のデータを復元するのではなく、アップグレードされたクラスタを復元することを望んでいます。

「いいね!」 1

投稿が既存のトピックに統合されました:セルフホスター向けのPostgreSQL 18アップデート