皆さん、こんにちは。Postgres DB に「pglogical」拡張機能を追加しようとすると、インストールされている Postgres のバージョンと、Postgres テンプレートおよび設定ファイルで参照されているバージョンとの間にいくつかの不一致があることに気づきました。
現在インストールされている Postgres のバージョンは 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)
または、v13 までしか対応していない postgres.template ファイルなどです。
これは、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
したがって、ライブラリファイルは異なる Postgres バージョン間で 1 対 1 の置き換えにはなりません。
結局、インストールされている Postgres のバージョンと、Docker ランチャーがビルドしていると考えているバージョンとの間に、いくらかのギャップがあるようです。
最終的な目標は pglogical をインストールすることであり、コンテナを再ビルドする際に再現可能なソリューション (テンプレートファイルに簡単に追加できるファイルや行) を見つけるのが最も理想的です。私は DevOps 作業を行う能力があり、それを行うことができます (組織の要件であるため)。しかし、他の人がこのギャップに遭遇したことがあり、どのように対処したかを知りたいだけです。
お読みいただきありがとうございます!