Всем привет. Я изучаю возможность установки расширения “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 (поскольку это требование моей организации), но меня интересует, сталкивались ли другие с этим разрывом и как вы его решили.
Спасибо за внимание!