Os modelos padrão do Discourse_docker e a versão do Postgres estão desajustados

Olá a todos, ao tentar adicionar a extensão “pglogical” ao nosso banco de dados Postgres, estou notando algumas discrepâncias entre a versão do postgres instalada e a versão citada pelos arquivos de template e configuração do postgres.

A versão do postgres atualmente instalada é a v16.2 (lançada em fevereiro de 2024), mas os arquivos de configuração ainda estão associados à v13, por exemplo:

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)

ou o arquivo postgres.template, que vai apenas até a v13.

Isso é um problema para mim agora porque a biblioteca pglogical está localizada nas pastas v16, mas não nas pastas v13. Tentei criar links simbólicos com

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/

mas isso apenas leva a este erro:

> FATAL: could not load library "/usr/lib/postgresql/13/lib/pglogical.so":/usr/lib/postgresql/13/lib/pglogical.so: undefined symbol: shmem_request_hook

Portanto, os arquivos da biblioteca não são uma substituição 1:1 entre as diferentes versões do postgres.

No final, parece haver uma lacuna entre a versão do postgres instalada e a versão que o docker launcher pensa que está construindo.

Meu objetivo final aqui é instalar o pglogical, e o ideal seria encontrar uma solução que seja reproduzível ao reconstruir o contêiner (ou seja, arquivos ou linhas que possam ser facilmente adicionados aos arquivos de template). Com certeza estou disposto a fazer mais do trabalho de DevOps necessário (já que é um requisito para minha organização), mas estou curioso se outros já encontraram essa lacuna e o que fizeram a respeito.

Obrigado por ler!

Tolo, tolo, tolo da minha parte. O motivo pelo qual os arquivos pglogical estão lá é porque eu executei

sudo apt-get install postgresql-16-pglogical

para colocá-los lá. (Foi um longo dia de DevOps ontem.) Executar um dpkg -L postgresql-16-pglogical apontou isso para mim…

Executar

sudo apt-get install postgresql-13-pglogical

fez o pglogical funcionar para mim sem problemas. Vou continuar explorando isso mais a fundo, mas pelo menos estou desbloqueado na minha tarefa urgente.

No entanto, acho que o ponto que fiz acima sobre as versões em discourse_docker e postgres permanece.

1 curtida

Note que psql --version e docker exec data su postgres -c \"echo 'select version();'|psql\"|grep PostgreSQL|cut -d \" \" -f 3 não são a mesma coisa.

Acho que a imagem tem ferramentas de cliente atualizadas (que funcionam para quem está executando versões posteriores do postgres que o Discourse (provavelmente) suporta) e ainda não forçou todo mundo a atualizar para o PG15 ou o que quer que seja o plano.

Gostaria também de informar que adicionar essa biblioteca pglogical com certeza quebra a atualização do postgres que foi introduzida em janeiro nos repositórios discourse + discourse_docker.

1 curtida