Discourse_docker 默认模板与 Postgres 版本不同步

大家好,在我尝试为我们的 Postgres 数据库添加“pglogical”扩展时,我注意到已安装的 PostgreSQL 版本与 PostgreSQL 模板和配置文件中引用的版本之间存在一些差异。

当前安装的 PostgreSQL 版本是 v16.2(2024 年 2 月发布),但配置文件仍与 v13 相关联,例如:

root@ip-172-31-62-223-app:/var/www/discourse# sudo -u postgres psql discourse
psql (16.2 (Debian 16.2-1.pgdg110+2), server 13.14 (Debian 13.14-1.pgdg110+2))
Type "help" for help.

discourse=# SHOW config_file;
               config_file
-----------------------------------------
 /etc/postgresql/13/main/postgresql.conf
(1 row)

或者 postgres.template 文件,该文件仅包含到 v13。

这对我来说目前只是一个问题,因为 pglogical 库位于 v16 文件夹中,但不在 v13 文件夹中。我尝试使用以下命令进行符号链接:

for i in $(ls /usr/share/postgresql/16/extension/pglogical*); do ln -s $i /usr/share/postgresql/13/extension/$(basename $i); done
ln -s /usr/lib/postgresql/16/lib/pglogical.so /usr/lib/postgresql/13/lib/

但这只会导致此错误:

> FATAL: could not load library "/usr/lib/postgresql/13/lib/pglogical.so":/usr/lib/postgresql/13/lib/pglogical.so: undefined symbol: shmem_request_hook

因此,库文件在不同的 PostgreSQL 版本之间不是一对一的替换。

最终,已安装的 PostgreSQL 版本与 Docker 启动器认为它正在构建的版本之间似乎存在一些差距。

我的最终目标是安装 pglogical,并且最好能找到一个在重建容器时可重现的解决方案(即,可以轻松添加到模板文件中的文件或行)。我肯定有能力完成更多所需的 DevOps 工作(因为这是我们组织的必需品),但只是想知道其他人是否遇到过这种差距以及你们是如何处理的。

感谢您的阅读!

我真是太傻了。pglogical 文件之所以存在,是因为我运行了

sudo apt-get install postgresql-16-pglogical

来放置它们。(昨天是漫长的一天 DevOps。)运行

dpkg -L postgresql-16-pglogical

指出了这一点……

运行

sudo apt-get install postgresql-13-pglogical

让我可以顺利运行 pglogical。我将继续进一步探索,但至少我紧急任务的障碍已经扫除。

然而,我认为我上面关于 discourse_docker 和 postgres 中版本问题的观点仍然成立。

1 个赞

请注意,psql --versiondocker exec data su postgres -c "echo 'select version();'|psql"|grep PostgreSQL|cut -d " " -f 3 并不相同。

我认为该镜像包含最新的客户端工具(适用于运行 Discourse(可能)支持的较新版本的 postgres 的用户),并且尚未强制每个人都更新到 PG15 或任何其他计划。

我还想指出,添加这个 pglogical 库很可能会破坏在 discourse 和 discourse_docker 仓库中于一月引入的 Postgres 升级。

1 个赞