PostgreSQL 18 升级后,Discourse 仍在使用 PostgreSQL 15 的二进制文件

我在 /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

我的问题是:

  1. 正确重建或更新 Discourse 容器以使其实际包含 PostgreSQL 18 二进制文件的方法是什么?

  2. app.yml 中是否应使用特定的模板或镜像标签?

  3. 一旦 PostgreSQL 18 可用,针对现有的 /shared/postgres_data 目录启动它的受支持流程是什么?

我没有删除或重新初始化 PostgreSQL 18 的数据目录。我更希望恢复已升级的集群,而不是还原旧的 PostgreSQL 15 数据。

一个帖子已合并到现有主题中:自托管用户的 PostgreSQL 18 更新