Les modèles par défaut de Discourse_docker et la version de Postgres sont désynchronisés

Bonjour à tous, en examinant l’ajout de l’extension “pglogical” à notre base de données Postgres, je remarque certaines divergences entre la version de postgres installée et la version citée par les fichiers de modèle et de configuration de postgres.

La version de postgres actuellement installée est la v16.2 (publiée en février 2024), mais les fichiers de configuration sont tous encore associés à la v13, par exemple :

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 le fichier postgres.template, qui ne va que jusqu’à la v13.

Ce n’est un problème pour moi qu’en ce moment car la bibliothèque pglogical se trouve dans les dossiers v16, mais pas dans les dossiers v13. J’ai essayé de créer des liens symboliques avec

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/

mais cela conduit à cette erreur :

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

Donc, les fichiers de bibliothèque ne sont pas un remplacement 1:1 entre les différentes versions de postgres.

En fin de compte, il semble y avoir un écart entre la version de postgres installée et la version que le lanceur docker pense construire.

Mon objectif final est d’installer pglogical, et il serait idéal de trouver une solution reproductible lors de la reconstruction du conteneur (c’est-à-dire des fichiers ou des lignes qui peuvent être facilement ajoutés aux fichiers de modèle). Je suis tout à fait disposé à faire davantage de travail DevOps nécessaire (car c’est une exigence pour mon organisation), mais je suis juste curieux de savoir si d’autres ont rencontré cet écart et ce qu’ils ont fait à ce sujet.

Merci de votre lecture !

Moi, moi, moi, quel idiot. La raison pour laquelle les fichiers pglogical sont là est que j’ai exécuté

sudo apt-get install postgresql-16-pglogical

pour les y mettre. (C’était une longue journée de DevOps hier.) L’exécution de dpkg -L postgresql-16-pglogical me l’a indiqué…

L’exécution de

sudo apt-get install postgresql-13-pglogical

a fait fonctionner pglogical sans problème. Je vais continuer à explorer cela plus en profondeur, mais au moins je ne suis plus bloqué sur ma tâche urgente.

Cependant, je pense que le point que j’ai soulevé ci-dessus concernant les versions dans discourse_docker et postgres reste valable.

1 « J'aime »

Notez que psql --version et docker exec data su postgres -c \"echo 'select version();'|psql\"|grep PostgreSQL|cut -d \" \" -f 3 ne sont pas la même chose.

Je pense que l’image contient des outils client à jour (qui fonctionnent pour ceux qui exécutent des versions ultérieures de postgres que Discourse (probablement) prend en charge) et n’a pas encore forcé tout le monde à passer à PG15 ou quel que soit le plan.

Je tiens également à noter que l’ajout de cette bibliothèque pglogical casse très probablement la mise à niveau de Postgres qui a été introduite en janvier dans les dépôts discourse + discourse_docker.

1 « J'aime »