大家好,在我尝试为我们的 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 工作(因为这是我们组织的必需品),但只是想知道其他人是否遇到过这种差距以及你们是如何处理的。
感谢您的阅读!