I backup falliscono con database Postgres 16 (e tutte le versioni PG > 13)

I backup non funzionano più per un database postgres 16 a causa di questo commit che installa postgresql-client-${PG_MAJOR} invece di postgresql-client

Questo risolve un problema? Il client psql fornito dal sistema operativo non funzionava bene con tutte le versioni di postgres?

Sono rimasto sorpreso che questo client utilizzasse PG16 su un database Digital Ocean, ma pensavo di sapere che alcune hosting CDCK stessero ora utilizzando PG15.

C’è un modo migliore per ottenere un backup funzionante rispetto a qualcosa del genere:

run:
  - exec:
      cd: /var/www/discourse
      cmd:
        - apt-get update && apt-get remove -y postgresql-client-13 && apt-get install -y postgresql-client-16

Forse posso impostare PG_MAJOR in una variabile ENV?

2 Mi Piace

Sì, sembra proprio di sì.

Dal PR:

Ho scoperto questo bug quando un backup di Discourse è stato eseguito utilizzando pg_dump versione 17.2 che non può essere ripristinato su cluster postgres < 17.2.

Sembra che tu sia tra l’incudine e il martello (PostgreSQL: Documentation: 18: pg_dump)

Poiché pg_dump viene utilizzato per trasferire dati a versioni più recenti di PostgreSQL, l’output di pg_dump può essere caricato su server PostgreSQL di versione successiva a quella di pg_dump. pg_dump può anche eseguire il dump da server PostgreSQL più vecchi della propria versione. (Attualmente, sono supportati server fino alla versione 9.2.) Tuttavia, pg_dump non può eseguire il dump da server PostgreSQL più recenti della propria versione principale; si rifiuterà persino di provarci, piuttosto che rischiare di creare un dump non valido. Inoltre, non è garantito che l’output di pg_dump possa essere caricato su un server di versione principale precedente, nemmeno se il dump è stato eseguito da un server di quella versione. Il caricamento di un file di dump su un server precedente potrebbe richiedere la modifica manuale del file di dump per rimuovere la sintassi non compresa dal server precedente.

Oops. E pensavo di aver letto il PR. Dato che sono un madrelingua inglese con un dottorato, si potrebbe pensare che potrei fare di meglio. :person_shrugging:

No. Non posso, dato che è questo che costruisce l’immagine di base.

Quindi, sembra che la mia correzione sia il meglio che si possa ottenere, anche se se fossi più intelligente espellerei le cose di apt che tiro dentro con apt-get update.

Immagino che altri avranno questo problema, poiché è spesso difficile convincere vari esseri umani e sistemi che si desidera PG13 piuttosto che qualcosa di più recente. E sembra che sia passato molto tempo da quando qualcuno che sa ha detto che Discourse stava lavorando con PG15.

Grazie, Richard!

1 Mi Piace

I backup falliscono silenziosamente??

(Vedo che la mia installazione ordinaria utilizza la versione 13, quindi presumo che questa situazione sia un po’ speciale, anche se forse non terribilmente rara.)

Non lo fanno. Quindi è abbastanza ovvio, e dovrebbe accadere solo a persone che ne sanno abbastanza da gestire il proprio postgres.

1 Mi Piace

Ciao a tutti, oggi mi sono imbattuto in questo problema. Il sintomo era che ricevevamo avvisi da circa 6 giorni che i backup stavano fallendo, e le righe di log chiave sembravano essere:

[2025-06-14 03:30:20] pg_dump: error: aborting because of server version mismatch
[2025-06-14 03:30:20] pg_dump: detail: server version: 16.9; pg_dump version: 15.12 (Debian 15.12-1.pgdg120+1)

Eseguo Discourse su Ubuntu su un droplet Digital Ocean, utilizzando la guida di installazione consigliata. Ma utilizzo il database Managed Postgres di Digital Ocean anziché un container postgres. Guardando il mio database, sta eseguendo pg 16. Non penso che lo abbiano aggiornato di recente (e non mi aspetterei comunque un aggiornamento automatico di una versione principale), ma ho contattato la loro assistenza per verificare.

Comunque, la mia ricerca mi ha portato a questa pagina. Non ero sicuro di dove mettere lo YAML che @pfaffman aveva pubblicato, quindi ho eseguito i comandi manualmente e ho pensato di condividerli per chiunque altro si imbattesse in questo:

  • cd /var/discourse
  • launcher enter app
  • apt list --installed | grep postgres # per confermare che la versione attualmente installata sia la 15
  • apt-get update
  • apt-get remove postgresql-client-15
  • apt-get install postgresql-client-16

Ho quindi attivato un backup manuale nella pagina di amministrazione dei backup.

Questo sembra aver risolto temporaneamente il problema, ma come ha sottolineato @pfaffman, mi aspetto che la prossima volta che aggiornerò Discourse, tornerà a postgresql-client-15 e i backup smetteranno di funzionare di nuovo, richiedendo l’intervento manuale sopra descritto.

C’è una soluzione a questo problema oltre a dover ripetere questi passaggi ogni volta che aggiorno Discourse?

Penso che da qualche parte qui fornisca il materiale per inserire quei comandi nel tuo app.yml.

Puoi guardare i modelli di postgres per degli esempi, forse.

Grazie, ma non sono sicuro di aver capito. Ho l’impressione che lo YAML che hai menzionato nel post originale sopra fosse semplicemente un modo per ridurre i comandi dalla manciata che ho pubblicato sopra a uno solo, ma che tu dovessi comunque eseguirlo manualmente ogni volta che aggiorni Discourse. Ho interpretato male?