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?
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
.
Je l'ai rencontré en utilisant Heroku sur Ubuntu, et voici comment je l'ai corrigé:
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.)
Passez à la dernière version (9.3 pour moi) avec:
Sudo apt-get install postgresql
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/...
.
Vérifiez les versions installées de pg_dump:
find / -name pg_dump -type f 2>/dev/null
Ma sortie était:
/usr/pgsql-9.3/bin/pg_dump
/usr/bin/pg_dump
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.
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
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, 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
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
.
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
Pour les utilisateurs de Mac Placé en haut du fichier .profile.
export PATH="/Applications/Postgres.app/Contents/MacOS/bin:$PATH"
puis courir
. ~/.profile
Pour ceux qui exécutent Postgres.app :
Ajoutez le code suivant à votre .bash_profile
:
export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH
Redémarrez le terminal.
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
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.
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:
brew services stop [email protected]
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.
** 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
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!
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
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.
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
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:
Essayez ça:
export PATH=/usr/local/bin:$PATH