Las plantillas predeterminadas de Discourse_docker y la versión de postgres están desincronizadas

Hola a todos, al intentar añadir la extensión “pglogical” a nuestra base de datos Postgres, estoy notando algunas discrepancias entre la versión de postgres instalada y la versión citada por los archivos de plantilla y configuración de postgres.

La versión de postgres actualmente instalada es la v16.2 (lanzada en febrero de 2024), pero los archivos de configuración todavía están asociados con la v13, por ejemplo:

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)

o el archivo postgres.template, que solo llega hasta la v13.

Esto solo es un problema para mí en este momento porque la biblioteca pglogical se encuentra en las carpetas v16, pero no en las carpetas v13. Intenté crear enlaces simbólicos con

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/

pero eso solo lleva a este error:

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

Por lo tanto, los archivos de la biblioteca no son un reemplazo 1:1 entre las diferentes versiones de postgres.

Al final, parece que hay una brecha entre la versión de postgres instalada y la versión que el lanzador de docker cree que está construyendo.

Mi objetivo final aquí es instalar pglogical, y lo más ideal sería encontrar una solución que sea reproducible al reconstruir el contenedor (es decir, archivos o líneas que se puedan agregar fácilmente a los archivos de plantilla). Definitivamente estoy dispuesto y soy capaz de hacer más del trabajo DevOps necesario aquí (ya que es un requisito para mi organización), pero solo tengo curiosidad si otros se han encontrado con esta brecha y qué han hecho al respecto.

¡Gracias por leer!

Tonta, tonta, tonta de mí. La razón por la que los archivos pglogical están ahí es porque ejecuté

sudo apt-get install postgresql-16-pglogical

para ponerlos allí. (Fue un largo día de DevOps ayer). Ejecutar un dpkg -L postgresql-16-pglogical me lo señaló…

Ejecutar

sudo apt-get install postgresql-13-pglogical

hizo que pglogical funcionara sin problemas. Voy a seguir explorando esto más a fondo, pero al menos ya no estoy bloqueado en mi tarea urgente.

Sin embargo, creo que el punto que menciono anteriormente sobre las versiones en discourse_docker y postgres sigue siendo válido.

1 me gusta

Tenga en cuenta que psql --version y docker exec data su postgres -c \"echo 'select version();'|psql\"|grep PostgreSQL|cut -d \" \" -f 3 no son lo mismo.

Creo que la imagen tiene herramientas de cliente actualizadas (que funcionan para quienes ejecutan versiones posteriores de postgres que Discourse (probablemente) soporta) y aún no ha obligado a todos a actualizar a PG15 o lo que sea que planeen hacer.

También me gustaría señalar que agregar esta biblioteca pglogical sin duda rompe la actualización de Postgres que se introdujo en enero en los repositorios discourse + discourse_docker.

1 me gusta