Discourse_docker デフォルトテンプレートと postgres バージョンが同期していません

皆さん、こんにちは。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 作業を行う能力があり、それを行うことができます (組織の要件であるため)。しかし、他の人がこのギャップに遭遇したことがあり、どのように対処したかを知りたいだけです。

お読みいただきありがとうございます!

おばか、おばか、おばか。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ライブラリを追加すると、1月にdiscourseとdiscourse_dockerリポジトリに導入されたPostgresのアップグレードが確実に壊れることも注記しておきたいです。

「いいね!」 1