Échec de la sauvegarde pg_dump pour pgsql distant : différences de port et de version ; quelles options existent ?

Lorsque j’essaie d’exécuter des sauvegardes système, j’obtiens le message : « La sauvegarde a échoué. Veuillez consulter les journaux. »
Le journal indique : pg_dump: [archiver (db)] la connexion à la base de données « discoursedb » a échoué : impossible de se connecter au serveur : Connexion refusée

Je pense qu’il y a deux problèmes en jeu :

  1. Le serveur distant fonctionne sur un port non standard.
  2. Le PostgreSQL distant exécute une version plus récente de PSQL.

Lorsque j’entre dans l’application (/var/discourse/launcher enter app) et que j’exécute une sauvegarde manuelle, j’ai remarqué que, initialement sans définition de port, j’obtenais exactement la même erreur :

$ pg_dump -h 123.456.789.101 -U username -W -F t discourse_db > discourse_db_backup.tar  
Mot de passe :  
pg_dump: [archiver (db)] la connexion à la base de données « discourse_db » a échoué : impossible de se connecter au serveur : Connexion refusée  
\tLe serveur est-il en cours d'exécution sur l'hôte « 123.456.789.101 » et accepte-t-il  
\tles connexions TCP/IP sur le port 5432 ?

Cela a donc été facilement résolu (SAUF que je ne sais pas comment forcer Discourse à utiliser le bon port lors des sauvegardes), mais le problème suivant était un peu plus préoccupant : nous utilisons une version plus récente de PSQL sur le serveur de base de données :

$ pg_dump -h 123.456.789.101 -p 45678 -U username -W -F t discourse_db > discourse_db_backup.tar  
Mot de passe :  
pg_dump: version du serveur : 11.5 (Ubuntu 11.5-3.pgdg18.04+1) ; version de pg_dump : 10.10 (Debian 10.10-1.pgdg100+1)  
pg_dump : abandon en raison d'une incompatibilité de version du serveur

Que peut-on faire dans une telle situation ? Existe-t-il un moyen de rendre la sauvegarde système fonctionnelle dans ce cas, ou faut-il sauvegarder Discourse et la base de données PostgreSQL séparément ?

Si la seconde option est la seule possible, quelle est la BONNE méthode pour sauvegarder au moins les données ? Existe-t-il un mécanisme cohérent préféré permettant de faire les deux en même temps sans avoir à écrire un nouveau script pour cela ?

J’ai effectivement trouvé une discussion dans un autre sujet concernant une personne se trouvant dans une situation légèrement comparable. La principale différence dans mon cas est que nous stockons les fichiers sur le serveur local plutôt que sur S3. Je pourrais me passer de sauvegarder PostgreSQL, car il est déjà sauvegardé indépendamment, mais je dois tout de même sauvegarder :

  • le contenu local et
  • les paramètres de Discourse

Je souhaiterais toujours une sauvegarde consolidée regroupant la base de données, le contenu et les paramètres au même endroit, mais je suppose que vous ne le supportez pas ou ne le ferez pas. Ainsi, je aimerais au moins obtenir un package consolidé contenant le contenu et les paramètres.

Postgres 11 n’est pas pris en charge. Vous pouvez chercher ailleurs comment restaurer entre les versions, mais cela demandera un certain travail pour faire fonctionner Discourse avec pg11.

Intéressant et étrange. J’avais lu quelque part que la version 11 était acceptable, mais à part cela, j’ai un système déjà déployé sur la 11 et je n’ai constaté aucune erreur ni aucun problème (sauf pour les sauvegardes) jusqu’ici… Maintenant, vous m’inquiétez…

Ah, voici, selon ce post, PostgreSQL 11 « devrait fonctionner sans problème ».

Oui. J’ai deux systèmes déployés sur pg11 également. Ils fonctionnent bien, sauf que je fais les sauvegardes directement. J’ai mis à niveau pg vers 11 dans le conteneur. Ils effectuent les sauvegardes mais ne les restaurent pas.

Le système de sauvegarde de Discourse devrait simplement avertir et ne pas échouer en cas d’incompatibilité de version PostgreSQL. Je viens d’essayer de faire une sauvegarde moi-même et, comme j’utilise également un serveur PG externe, aucun fichier tarball n’a été créé.

Le même problème m’est arrivé. J’ai déplacé la base de données postgresql sur un serveur séparé et j’ai commencé à recevoir une erreur de sauvegarde. J’ai trouvé la solution en supprimant et en réinstallant postgresql dans docker sur le serveur principal.

cd /var/discourse
./launcher enter app
apt-get remove postgresql-client-common
apt-get update
sudo apt-get install postgresql

Détail : Discourse yedekleme pg_dump hatası ve çözümü: pg_dump: error: server version: 12|13|14|15|*; pg_dump version: 12|13|14|15|* - Veritabanı Yönetim Sistemleri - Soru Cevap