web-dev-qa-db-fra.com

Postgresql 9.2 Incompatibilité de version de pg_dump

J'essaie de vider une base de données Postgresql en utilisant pg_dump tool. 

$ pg_dump books > books.out

Comment jamais 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 obsolète et ne constituerait 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?

120
Chris Colla

Vous pouvez installer PostgreSQL 9.2.1 sur l’ordinateur client pg_dump ou simplement copier le $PGHOME de l’ordinateur serveur PostgreSQL sur l’ordinateur client. 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, pensez à modifier certaines variables d’environnement dans votre fichier .bash_profile.

25
francs

Je l'ai rencontré en utilisant Heroku sur Ubuntu, et voici comment je l'ai corrigé:

  1. Ajoutez le référentiel apt PostgreSQL comme décrit dans " Téléchargements Linux (Ubuntu) ". (Il existe des pages similaires pour d'autres systèmes d'exploitation.)

  2. Passez à 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 server version de l'erreur que vous avez reçue. Donc, si votre erreur dit, pg_dump: server version: 9.9, alors créez un lien vers /usr/lib/postgresql/9.9/....

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

    find / -name pg_dump -type f 2>/dev/null
    
  2. Ma sortie était:

    /usr/pgsql-9.3/bin/pg_dump
    /usr/bin/pg_dump
    
  3. Il y a 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.

47
Omer Aslam

Sur les Mac, la commande /usr/bin/pg_dump intégrée est utilisée par défaut.

Avec l’installation de postgresql, vous obtenez un autre fichier binaire à /Library/PostgreSQL/<version>/bin/pg_dump

40
user2148301

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
24
Deepak Mahakale

Si vous êtes sur Ubuntu, vous avez peut-être 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
15
Abe Voelker

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 exister 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 plus récente) et essayez d’exécuter le fichier pg_dump .

10
solaimuruganv

Pour les Mac avec Homebrew. J'ai eu ce problème en récupérant la base de données de Heroku. Je l'ai corrigé juste en cours d'exécution:

brew upgrade postgresql
5
hcarreras

Pour les utilisateurs de Mac Placé en haut du fichier .profile.

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

puis courir 

. ~/.profile
5
Andrey Yasinishyn

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.

3
Andreas

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 <formula> (par exemple: brew install petere/postgresql/postgresql-9.6)

Supprimer l'ancien postgre:

brew unlink postgresql

brew link -f postgresql-9.6

En cas d'erreur, n'oubliez pas de lire et de suivre les instructions relatives à la préparation à chaque étape.

Regardez ceci pour plus: https://github.com/petere/homebrew-postgresql

2
ThangTD

Si vous avez un menu fixe installé, vous pouvez faire quelque chose comme:

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

Cela téléchargera le conteneur Docker contenant Postgres 9.2, lancera pg_dump à l'intérieur du conteneur et écrira le résultat.

1
mzsanford

J'ai eu la même erreur et voici comment je l'ai résolue dans mon cas. Cela signifie que votre version de postgresql est la version 9.2.1 mais que vous avez démarré le service postgresql de la version 9.1.6.

Si vous exécutez psql postgres, vous verrez:

psql (9.2.1, server 9.1.6)

Ce que j'ai fait pour résoudre ce problème est:

  1. brew services stop [email protected]
  2. brew services restart [email protected]

Maintenant, lancez psql postgres et vous devriez avoir: psql (9.2.1)

Vous pouvez également exécuter brew services list pour voir le statut de vos postgres.

1
bright

** après installation, la version de postgres correspond (9.2) Créez 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 base de données postgres

Eh bien, j'ai eu le même problème car j'ai deux versions de postgres 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
1
Petr

Pour les macs, utilisez find / -name pg_dump -type f 2>/dev/null trouver 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!

0
zhaoqing

Si vous utilisez le fichier Postgres.app de Heroku, le pg_dump (ainsi que tous les autres fichiers binaires) est dans /Applications/Postgres.app/Contents/MacOS/bin/

alors 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

0
mlebarron

Une réponse alternative que je ne pense pas que quelqu'un d'autre ait couverte.

Si vous avez plusieurs clusters PG installés (comme je le fais), vous pouvez afficher ceux qui utilisent pg_lsclusters.

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

À partir de là, vous pouvez alors faire ceci:

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

Évidemment, remplacez la version et le nom du cluster par celui qui convient en fonction de votre situation, de ce qui est renvoyé par pg_lsclusters en séparant la version et le cluster par un /. Cela cible le cluster spécifique que vous souhaitez exécuter.

0
ManoDestra

La réponse semble absurde, mais si vous obtenez l’erreur ci-dessus et que vous voulez exécuter pg_dump pour une version antérieure, accédez au répertoire bin de postgres et tapez 

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

0
Joe Root

Si la base de données est installée sur un autre ordinateur, la version de pg_dump installée est probablement correcte. 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 pas encore fait) une paire de clés avec la commande ssh-keygen. 
  2. Copiez la clé publique sur le serveur de base de données, généralement ~/.ssh/registered_keys.
  3. Teste si la connexion fonctionne avec la commande ssh.
0
tomasz

Essayez ça: 

export PATH=/usr/local/bin:$PATH
0
Benjamin Crouzier