Шаблоны по умолчанию и версия PostgreSQL в Discourse Docker рассинхронизированы

Всем привет. Я изучаю возможность установки расширения “pglogical” в нашу базу данных Postgres и заметил расхождения между версией установленного Postgres и версией, указанной в шаблоне и конфигурационных файлах Postgres.

В настоящее время установлена версия Postgres v16.2 (выпущена в феврале 2024 года), однако все конфигурационные файлы всё ещё связаны с версией 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

Таким образом, файлы библиотек не являются взаимозаменяемыми 1:1 между разными версиями Postgres.

В итоге получается, что между установленной версией Postgres и версией, которую, по мнению docker launcher, собирается, существует определённый разрыв.

Моя конечная цель — установить 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 остаётся в силе.

Обратите внимание, что psql --version и docker exec data su postgres -c "echo 'select version();'|psql"|grep PostgreSQL|cut -d " " -f 3 — это не одно и то же.

Думаю, что в образе используются актуальные клиентские утилиты (которые работают для тех, кто использует более поздние версии PostgreSQL, поддерживаемые Discourse), и пока не заставляют всех обновляться до PG15 или любой другой версии, запланированной на будущее.

Также хочу отметить, что добавление этой библиотеки pglogical, безусловно, нарушает обновление PostgreSQL, внедрённое в январе в репозиториях discourse и discourse_docker.