Non-concordance de version de PostgreSQL 9.2 pg_dump

141

J'essaye de vider une base de données Postgresql à l'aide de l' outil pg_dump .

$ 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' --ignore-versionoption est maintenant obsolète 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?

Chris Colla
la source
étapes simples stackoverflow.com/a/42158528/4758119
Deepak Mahakale

Réponses:

27

Vous pouvez soit installer PostgreSQL 9.2.1 sur la pg_dumpmachine cliente, soit simplement copier le $PGHOMEdepuis la machine serveur PostgreSQL vers la machine cliente. Notez qu'il n'est pas nécessaire de initdbcréer un nouveau cluster sur l'ordinateur client.

Après avoir terminé l'installation du logiciel 9.2.1, n'oubliez pas de modifier certaines variables d'environnement dans votre .bash_profilefichier.

francs
la source
75

J'ai rencontré cela 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 /usr/binavec:

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

    Le numéro de version dans le /usr/lib/postgresql/...chemin ci-dessus doit correspondre au server versionnuméro 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/....

Seth
la source
Cela ne se produit que lorsque vous mettez à niveau PostgreSQL. Je viens de faire une nouvelle installation du système d'exploitation et je n'ai eu aucun problème avec cela.
Seth
Pour quiconque se demande, cette solution s'applique également à Ubuntu non Heroku.
IanBussieres
2
D'après ce qui a été dit dans cette réponse , c'est aussi une très mauvaise idée.
Arthur
Cette réponse recommande de supprimer le logiciel en supprimant un dossier. Ici, nous ne faisons que recréer un lien symbolique.
Seth
2
Parfait! Recréer le lien symbolique après la mise à niveau postgres
Yo Ludke
61
  1. Vérifiez la ou 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 existe deux versions installées. Pour mettre à jour pg_dump avec la version la plus récente:

    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.

Omer Aslam
la source
2
Il a été beaucoup plus rapide pour moi de trouver les versions en utilisantlocate pg_dump
Obromios
1
IMO, vous ne devriez pas ajouter 2>/dev/nullcar cela rejettera le flux ERROR plutôt que de l'imprimer sur la console. Je pense que l'on devrait vouloir voir des erreurs se produire, sauf dans de rares cas. Par exemple, dans mon cas, cela me rappelle que je n'étais pas root et que je ne voyais donc pas certains répertoires où la nouvelle version de pg_dump était installée. En général, ne supprimez pas les erreurs.
Poutrathor
40

Les Mac ont une /usr/bin/pg_dumpcommande intégrée qui est utilisée par défaut.

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

user2148301
la source
3
L'emplacement variera en fonction de la façon dont PostgreSQL a été installé (programme d'installation d'EnterpriseDB, MacPorts, Homebrew, etc.), mais l'essentiel de la réponse - que l'utilisateur a probablement déjà installé la bonne version - est certainement juste.
Craig Ringer
3
Dans mon cas, ouvrir .bash_profile et ajouter "export PATH = / Applications / Postgres.app / contents / macos / bin: $ PATH" a fait la magie.
Alex Weber
29

Vous pouvez simplement localiser pg_dumpet 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
Deepak Mahakale
la source
1
Pour les utilisateurs CentOS (ma version est la 6.9 Final):sudo /usr/pgsql-<version>/bin/pg_dump <database-name> -U <username> -h localhost
Davidson Lima
@ jDub9 quelle version avez-vous utilisée en prenant le dump? Assurez-vous que vous utilisez le même
Deepak Mahakale
16

Si vous êtes sur Ubuntu, vous avez peut-être une ancienne version de postgresql-client. En fonction des 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
Abe Voelker
la source
11

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 PostgreSQL/bin répertoire quelque part sur votre système, sous la dernière version de PostgreSQL que vous avez installée (9.2.1 est la dernière) et essayez d'exécuter le à pg_dump partir de là.

solaimuruganv
la source
10
Conseil: dans Terminal.app,find / -name pg_dump -type f 2>/dev/null
Craig Ringer
8

Pour ceux qui utilisent 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.

Andreas
la source
7

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

brew upgrade postgresql
hcarreras
la source
6

Pour les utilisateurs de Mac, mettez en haut du fichier .profile.

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

puis courir

. ~/.profile
Andrey Yasinishyn
la source
3

Comme expliqué, c'est parce que votre postgresql est dans l'ancienne version -> mettez-le à 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

Si une erreur se produit, n'oubliez pas de lire et de suivre les instructions d'infusion à chaque étape.

Vérifiez ceci pour plus: https://github.com/petere/homebrew-postgresql

ThangTD
la source
3

Une réponse alternative que je ne pense pas que quiconque ait couvert.

Si vous avez plusieurs clusters PG installés (comme moi), vous pouvez les afficher à l'aide de pg_lsclusters.

Vous devriez pouvoir voir la version et le cluster dans 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 ceux qui correspondent à votre situation et ceux renvoyés en pg_lsclustersséparant la version et le cluster par un /. Cela cible le cluster spécifique sur lequel vous souhaitez exécuter.

ManoDestra
la source
1
Ceci est très utile. Comme je ne savais pas pourquoi je pg_dumpne travaillais pas sur l'un de mes clusters. Il s'est avéré qu'il utilisait la version Postgresql par défaut, lorsqu'un de mes clusters a été mis à niveau vers une version plus récente. Spécifier le cluster, a résolu le problème.
Andrius
3

Pour moi, le problème était que la mise à jour psql apt-getne résolvait pas les nouvelles versions, même après update. Ce qui suit a fonctionné.

Ubuntu

Commencez par importer la clé GPG pour les packages PostgreSQL.

sudo apt-get install wget ca-certificates
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Ajoutez maintenant le référentiel à votre système.

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'

Installez PostgreSQL sur Ubuntu

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib

https://www.postgresql.org/download/linux/ubuntu/

Glen Thompson
la source
1
Cela ne remplacera pas les fichiers exécutables existants sur votre ordinateur, vous devrez donc utiliser explicitement la nouvelle version de pg_dump, par exemple /usr/lib/postgresql/9.6/bin/pg_dump ou créer un nouveau raccourci par exemple / usr / bin / pg_dump96
vinh le
Je n'ai pas eu à utiliser explicitement le nouveau, il l'a ramassé.
rado
2

Si docker est installé, vous pouvez faire quelque chose comme:

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

Cela téléchargera le conteneur Docker avec Postgres 9.2, s'exécutera à l' pg_dumpintérieur du conteneur et écrira la sortie.

mzsanford
la source
2

La réponse semble idiote mais si vous obtenez l'erreur ci-dessus et que vous voulez exécuter pg_dump pour la 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

Joe Root
la source
2

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

Si vous exécutez, psql postgresvous 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, exécutez psql postgreset vous devriez avoir:psql (9.2.1)

Vous pouvez également exécuter brew services listpour voir l'état de vos postgres.

brillant
la source
1

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

ช่าง คอม ผู้ ยิ่ง ใหญ่
la source
1

Essayez ça:

export PATH=/usr/local/bin:$PATH
Benjamin Crouzier
la source
1

Si la base de données est installée sur une machine différente, 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 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 / authorized_keys.
  3. Testez si la connexion fonctionne avec la commande ssh.
Tomasz
la source
1

Eh bien, j'ai eu le même problème car j'ai installé deux versions postgress.

Utilisez simplement le pg_dump approprié et vous n'avez rien à changer, dans votre cas:

 $> /usr/lib/postgresql/9.2/bin/pg_dump books > books.out
Petr
la source
0

Si vous utilisez Postgres.app de Heroku, pg_dump (avec tous les autres binaires) est 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/.

pour les attraper tous

mlebarron
la source
0

Pour les macs, utilisez find / -name pg_dump -type f 2>/dev/nullrechercher 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 souhaitez 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_dumpdans votre terminal

Par exemple:

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

Ça marche pour moi!

zhaoqing
la source
0

Téléchargez la version appropriée de postgres ici:

https://www.postgresql.org/download/

Assurez-vous d'exécuter les commandes suivantes (l'URL postgresql.org/download générera l'URL spécifique que vous utiliserez; celle que j'utilise ci-dessous n'est qu'un exemple pour centos 7) comme sudo:

sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install postgresql11-server

votre version de pg_dump devrait maintenant être mise à jour, vérifiez avec pg_dump -V

lobi
la source
-6

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 intégré pg_dumpà /usr/bin/pg_dump(en tant que root: "rm / usr / bin / pg_dump")
  • Maintenant, faites un lien symbolique de l'installation de 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

Joseph N.
la source
9
Nonono, ne supprimez pas simplement les fichiers gérés par paquets! Si c'est dans /usr/(plutôt que /usr/local/, /home/ou /opt/, où la suppression de choses est généralement OK), vous devez vraiment utiliser le gestionnaire de paquets - rpm& yumou dpkget apt-getou aptitude, selon la distribution. Désinstallez le package avec rpmou modifiez votre PATHvariable d'environnement dans votre .bash_profileafin que la version la plus récente soit trouvée en premier. Si vous avez un doute sur quelque chose sous la gestion des paquets, utilisez rpm -qf /path/to/file(RPM) ou dpkg -S /path/to/file(dpkg)
Craig Ringer