Non-concordance de la version postgresql 9.2 pg_dump

J’essaie de vider une firebase database Postgresql en utilisant l’outil pg_dump .

$ pg_dump books > books.out 

Comme je reçois cette erreur.

 pg_dump: server version: 9.2.1; pg_dump version: 9.1.6 pg_dump: aborting because of server version mismatch 

L’option --ignore-version est maintenant dépréciée et ne serait vraiment pas une solution à mon problème, même si cela avait fonctionné.

Comment puis-je mettre à niveau pg_dump pour résoudre ce problème?

Vous pouvez soit installer PostgreSQL 9.2.1 dans la machine client pg_dump , soit copier simplement $PGHOME de la machine serveur PostgreSQL sur la machine cliente. Notez qu’il n’est pas nécessaire de initdb un nouveau cluster sur l’ordinateur client.

Une fois l’installation du logiciel 9.2.1 terminée, n’oubliez pas de modifier certaines variables d’environnement dans votre fichier .bash_profile .

J’ai rencontré ceci en utilisant Heroku sur Ubuntu, et voici comment je l’ai corrigé:

  1. Ajoutez le référentiel apt de PostgreSQL comme décrit dans ” Linux downloads (Ubuntu) “. (Il existe des pages similaires pour d’autres systèmes d’exploitation.)

  2. Mise à niveau vers la dernière version (9.3 pour moi) avec:

     sudo apt-get install postgresql 
  3. Recréez le lien symbolique dans /usr/bin avec:

     sudo ln -s /usr/lib/postgresql/9.3/bin/pg_dump /usr/bin/pg_dump --force 

    Le numéro de version dans le chemin /usr/lib/postgresql/... ci-dessus doit correspondre au numéro de server version du server version dans l’erreur que vous avez reçue. Donc, si votre erreur indique, pg_dump: server version: 9.9 , puis un lien vers /usr/lib/postgresql/9.9/...

  1. Vérifiez les versions installées de pg_dump:

     find / -name pg_dump -type f 2>/dev/null 
  2. Mon résultat était:

     /usr/pgsql-9.3/bin/pg_dump /usr/bin/pg_dump 
  3. Il existe deux versions installées. Pour mettre à jour pg_dump avec la nouvelle version:

     sudo ln -s /usr/pgsql-9.3/bin/pg_dump /usr/bin/pg_dump --force 

Cela créera le lien symbolique vers la nouvelle version.

Les Mac ont une commande intégrée /usr/bin/pg_dump utilisée par défaut.

Avec l’installation postgresql, vous obtenez un autre fichier binary dans /Library/PostgreSQL//bin/pg_dump

Vous pouvez simplement localiser pg_dump et utiliser le chemin complet dans la commande

 locate pg_dump /usr/bin/pg_dump /usr/bin/pg_dumpall /usr/lib/postgresql/9.3/bin/pg_dump /usr/lib/postgresql/9.3/bin/pg_dumpall /usr/lib/postgresql/9.6/bin/pg_dump /usr/lib/postgresql/9.6/bin/pg_dumpall 

Maintenant, utilisez simplement le chemin de la version souhaitée dans la commande

 /usr/lib/postgresql/9.6/bin/pg_dump books > books.out 

Si vous êtes sur Ubuntu, une ancienne version de postgresql-client installée. Selon les versions de votre message d’erreur, la solution serait la suivante:

 sudo apt-get remove postgresql-client-9.1 sudo apt-get install postgresql-client-9.2 

Chaque fois que vous mettez à niveau ou réinstallez une nouvelle version de PostgreSQL, une dernière version de pg_dump est installée.

Il doit y avoir un répertoire PostgreSQL/bin quelque part sur votre système, sous la dernière version de PostgreSQL que vous avez installée (la version 9.2.1 est la dernière) et essayez d’exécuter pg_dump partir de là.

Pour les utilisateurs de mac, mettre en haut du fichier .profile.

 export PATH="/Applications/Postgres.app/Contents/MacOS/bin:$PATH" 

puis courir

 . ~/.profile 

Pour les Mac avec Homebrew. J’ai eu ce problème en allant chercher la firebase database de Heroku. Je l’ai réparé juste en cours d’exécution:

 brew upgrade postgresql 

Comme expliqué, c’est parce que votre postgresql est dans l’ancienne version -> le mettre à jour Pour Mac via homebrew:

brew tap petere/postgresql ,

brew install (ex: brew install petere/postgresql/postgresql-9.6 )

Supprimer l’ancien postgre:

brew unlink postgresql

brew link -f postgresql-9.6

Si une erreur survient, n’oubliez pas de lire et de suivre les instructions de préparation à chaque étape.

Découvrez-en plus: https://github.com/petere/homebrew-postgresql

** après l’installation de la version postgres est la correspondance (9.2) Créer un lien symbolique ou un nouveau raccourci

** – sur ‘/ usr / bin’

 syntag is = sudo ln -s [path for use] [new shortcut name] 

Exemple

 sudo ln -s /usr/lib/postgresql/9.2/bin/pg_dump new_pg_dump 

– comment appeler: new_pg_dump -h 192.168.9.88 -U firebase database postgres

Si vous avez installé Docker, vous pouvez faire quelque chose comme:

$ docker run postgres:9.2 pg_dump books > books.out

Cela va télécharger le conteneur Docker avec Postgres 9.2, lancer pg_dump intérieur du conteneur et écrire la sortie.

Eh bien, j’ai eu le même problème que j’ai deux versions postgress installées.

Il suffit d’utiliser le bon pg_dump et vous n’avez rien à changer, dans votre cas:

  $> /usr/lib/postgresql/9.2/bin/pg_dump books > books.out 

Pour ceux qui exécutent Postgres.app :

  1. Ajoutez le code suivant à votre .bash_profile :

     export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH 
  2. Redémarrez le terminal.

Si vous utilisez Postgres.app de Heroku, le fichier pg_dump (avec tous les autres binarys) se trouve dans /Applications/Postgres.app/Contents/MacOS/bin/

donc dans ce cas c’est

ln -s /Applications/Postgres.app/Contents/MacOS/bin/pg_dump /usr/local/bin/pg_dump

ou

ln -s /Applications/Postgres.app/Contents/MacOS/bin/* /usr/local/bin/.

juste les attraper tous

Essayez cela:

 export PATH=/usr/local/bin:$PATH 

Si la firebase database est installée sur un autre ordinateur, la version correcte de pg_dump est probablement installée. Cela signifie que vous pouvez exécuter la commande pg_dump à distance avec SSH: ssh username@dbserver pg_dump books > books.out

Vous pouvez également utiliser l’authentification par clé publique pour une exécution sans mot de passe. Étapes pour y parvenir:

  1. Générez (si ce n’est pas déjà fait) une paire de clés avec la commande ssh-keygen.
  2. Copiez la clé publique sur le serveur de firebase database, généralement ~ / .ssh / authorized_keys.
  3. Testez si la connexion fonctionne avec la commande ssh.

Pour les macs, utilisez find / -name pg_dump -type f 2>/dev/null recherchez l’emplacement de pg_dump

Pour moi, j’ai les résultats suivants:

 Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dump /usr/local/Cellar/postgresql/9.4.5_2/bin/pg_dump 

Si vous ne voulez pas utiliser sudo ln -s new_pg_dump old_pg_dump --force , utilisez simplement:

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dump à remplacer par pg_dump dans votre terminal

Par exemple:

 Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dump books > books.out 

Ça marche pour moi!

La réponse semble idiote mais si vous obtenez l’erreur ci-dessus et que vous voulez lancer pg_dump pour une version antérieure, allez dans le répertoire bin de postgres et tapez

./pg_dump nom_serveur> out.sql ./ ignore la racine et recherche pg_dump dans le répertoire courant

Une autre réponse que je pense que personne d’autre n’a couverte.

Si vous avez plusieurs clusters PG installés (comme moi), vous pouvez voir ceux qui utilisent pg_lsclusters .

Vous devriez pouvoir voir la version et le cluster de la liste affichée.

De là, vous pouvez alors faire ceci:

 pg_dump --cluster=9.6/main books > books.out 

Évidemment, remplacez le nom de la version et du cluster par celui correspondant à votre situation par rapport à celui renvoyé par pg_lsclusters séparant la version et le cluster avec un /. Cela cible le cluster spécifique que vous souhaitez exécuter.

J’ai rencontré un problème similaire sur mon installation Fedora 17. C’est ce que j’ai fait pour contourner le problème

  • Supprimez le fichier pg_dump intégré dans /usr/bin/pg_dump (en tant que root: “rm / usr / bin / pg_dump”)
  • Faites maintenant un lien symbolique de l’installation postgresql

    Encore une fois en tant que root ln -s /usr/pgsql-9.2/bin/pg_dump /usr/bin/pg_dump

Cela devrait faire l’affaire