I modelli predefiniti di Discourse_docker e la versione di Postgres sono fuori sync

Ciao a tutti, mentre cerco di aggiungere l’estensione “pglogical” al nostro database Postgres, noto alcune discrepanze tra la versione di postgres installata e la versione citata dai file di template e configurazione di postgres.

La versione di postgres attualmente installata è la v16.2 (rilasciata a febbraio 2024), ma i file di configurazione sono tutti ancora associati alla v13, ad esempio:

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 il file postgres.template, che arriva solo fino alla v13.

Questo è un problema per me solo ora perché la libreria pglogical si trova nelle cartelle v16, ma non in quelle v13. Ho provato a creare collegamenti simbolici 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/

ma questo porta solo a questo errore:

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

Quindi i file della libreria non sono una sostituzione 1:1 tra le diverse versioni di postgres.

Alla fine, sembra che ci sia un po’ di divario tra la versione di postgres installata e la versione che il docker launcher pensa di creare.

Il mio obiettivo finale è installare pglogical, e sarebbe ideale trovare una soluzione riproducibile quando si ricostruisce il container (cioè, file o righe che possono essere facilmente aggiunti ai file di template). Sono sicuramente in grado di fare altro lavoro DevOps necessario (poiché è un requisito per la mia organizzazione), ma sono solo curioso se altri hanno riscontrato questo divario e cosa hanno fatto al riguardo.

Grazie per aver letto!

Sciocco, sciocco, sciocco io. Il motivo per cui i file pglogical sono lì è perché ho eseguito

sudo apt-get install postgresql-16-pglogical

per metterli lì. (È stata una lunga giornata di DevOps ieri.) Eseguendo

dpkg -L postgresql-16-pglogical

me lo ha fatto notare…

Eseguendo

sudo apt-get install postgresql-13-pglogical

ho fatto funzionare pglogical senza problemi. Continuerò ad approfondire, ma almeno non sono bloccato sul mio compito urgente.

Tuttavia, penso che il punto che ho sollevato sopra riguardo alle versioni in discourse_docker e postgres rimanga.

1 Mi Piace

Si noti che psql --version e docker exec data su postgres -c \"echo 'select version();'|psql\"|grep PostgreSQL|cut -d \" \" -f 3 non sono la stessa cosa.

Penso che l’immagine abbia strumenti client aggiornati (che funzionano per coloro che eseguono versioni successive di postgres che Discourse (probabilmente) supporta) e non abbia ancora costretto tutti ad aggiornare a PG15 o qualunque sia il piano.

Vorrei anche sottolineare che l’aggiunta di questa libreria pglogical sicuramente interrompe l’aggiornamento di Postgres introdotto a gennaio nei repository discourse + discourse_docker.

1 Mi Piace