Postgresql 9.2 pg_dump Versionsinkongruenz


141

Ich versuche, eine Postgresql-Datenbank mit dem Tool pg_dump zu sichern .

$ pg_dump books > books.out

Wie auch immer, ich bekomme diesen Fehler.

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

Die --ignore-versionOption ist jetzt veraltet und wäre wirklich keine Lösung für mein Problem, selbst wenn es funktioniert hätte.

Wie kann ich pg_dump aktualisieren , um dieses Problem zu beheben?


Antworten:


27

Sie können PostgreSQL 9.2.1 entweder auf dem pg_dumpClient-Computer installieren oder einfach $PGHOMEvom PostgreSQL-Server auf den Client-Computer kopieren . Beachten Sie, dass initdbauf dem Clientcomputer kein neuer Cluster erforderlich ist .

Denken Sie nach Abschluss der Installation der 9.2.1-Software daran, einige Umgebungsvariablen in Ihrer .bash_profileDatei zu bearbeiten .


75

Ich bin darauf gestoßen, als ich Heroku unter Ubuntu verwendet habe, und hier ist, wie ich es behoben habe:

  1. Fügen Sie das PostgreSQL apt-Repository hinzu, wie unter " Linux-Downloads (Ubuntu) " beschrieben. (Es gibt ähnliche Seiten für andere Betriebssysteme.)

  2. Upgrade auf die neueste Version (9.3 für mich) mit:

    sudo apt-get install postgresql
  3. Erstellen Sie die symbolische Verknüpfung neu /usr/binmit:

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

    Die Versionsnummer im /usr/lib/postgresql/...obigen Pfad sollte mit der server versionNummer des Fehlers übereinstimmen, den Sie erhalten haben. Wenn Ihr Fehler lautet, pg_dump: server version: 9.9verlinken Sie auf /usr/lib/postgresql/9.9/....


Dies geschieht nur, wenn Sie PostgreSQL aktualisieren. Ich habe gerade eine Neuinstallation des Betriebssystems durchgeführt und hatte damit keine Probleme.
Seth

Für alle, die sich fragen, gilt diese Lösung auch für Nicht-Heroku-Ubuntu.
IanBussieres

2
Nach dem, was in dieser Antwort gesagt wurde , ist es auch eine ziemlich schlechte Idee.
Arthur

In dieser Antwort wird empfohlen, die Software durch Löschen eines Ordners zu entfernen. Hier erstellen wir nur eine symbolische Verknüpfung.
Seth

2
Perfekt! Neuerstellung der symbolischen Verbindung nach dem Postgres-Upgrade
Yo Ludke

60
  1. Überprüfen Sie die installierte (n) Version (en) von pg_dump:

    find / -name pg_dump -type f 2>/dev/null
  2. Meine Ausgabe war:

    /usr/pgsql-9.3/bin/pg_dump
    /usr/bin/pg_dump
    
  3. Es sind zwei Versionen installiert. So aktualisieren Sie pg_dump mit der neueren Version:

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

Dadurch wird der Symlink zur neueren Version erstellt.


2
Es war viel schneller für mich, die Versionen mitlocate pg_dump
Obromios

1
IMO, sollten Sie nicht hinzufügen, 2>/dev/nullda dadurch der ERROR-Stream gelöscht wird, anstatt ihn auf der Konsole zu drucken. Ich denke, man sollte sehen wollen, dass Fehler auftreten, außer in einigen seltenen Fällen. In meinem Fall erinnert es mich beispielsweise daran, dass ich nicht root war, sodass einige Verzeichnisse, in denen die neuere Version von pg_dump installiert wurde, nicht angezeigt wurden. Entfernen Sie im Allgemeinen keine Fehler.
Poutrathor

40

Macs verfügen über einen integrierten /usr/bin/pg_dumpBefehl, der standardmäßig verwendet wird.

Mit der postgresql-Installation erhalten Sie eine weitere Binärdatei bei /Library/PostgreSQL/<version>/bin/pg_dump


3
Der Speicherort hängt davon ab, wie PostgreSQL installiert wurde (EnterpriseDB-Installationsprogramm, MacPorts, Homebrew usw.), aber der Kern der Antwort - dass der Benutzer wahrscheinlich bereits die richtige Version installiert hat - ist sicherlich richtig.
Craig Ringer

3
In meinem Fall hat das Öffnen von .bash_profile und das Hinzufügen von "export PATH = / Applications / Postgres.app / content / macos / bin: $ PATH" die Magie bewirkt.
Alex Weber

29

Sie können einfach pg_dumpden vollständigen Pfad im Befehl suchen und verwenden

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

Verwenden Sie jetzt einfach den Pfad der gewünschten Version im Befehl

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

1
Für CentOS-Benutzer (meine Version ist 6.9 Final):sudo /usr/pgsql-<version>/bin/pg_dump <database-name> -U <username> -h localhost
Davidson Lima

@ jDub9 Welche Version haben Sie beim Erstellen des Dumps verwendet? Stellen Sie sicher, dass Sie das gleiche verwenden
Deepak Mahakale

16

Wenn Sie unter Ubuntu arbeiten, ist möglicherweise eine alte Version von postgresql-clientinstalliert. Basierend auf den Versionen in Ihrer Fehlermeldung lautet die Lösung wie folgt:

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

11

Jedes Mal, wenn Sie eine neue Version von PostgreSQL aktualisieren oder neu installieren, wird eine neueste Version von pg_dump installiert.

Es muss PostgreSQL/bin irgendwo auf Ihrem System ein Verzeichnis unter der neuesten Version von PostgreSQL vorhanden sein, die Sie installiert haben (9.2.1 ist die neueste), und versuchen Sie, das Verzeichnis pg_dump von dort aus auszuführen .


10
Tipp: in Terminal.app,find / -name pg_dump -type f 2>/dev/null
Craig Ringer

8

Für diejenigen, die Postgres.app ausführen :

  1. Fügen Sie Ihrem Code den folgenden Code hinzu .bash_profile:

    export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH
  2. Terminal neu starten.


7

Für Macs mit Homebrew. Ich hatte dieses Problem beim Abrufen der Datenbank von Heroku. Ich habe behoben, dass es gerade läuft:

brew upgrade postgresql

6

Für Mac-Benutzer an die Spitze der .profile-Datei setzen.

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

dann renne

. ~/.profile


3

Wie bereits erläutert, liegt dies daran, dass Ihr Postgresql in der alten Version vorliegt -> Aktualisieren Sie es für Mac über Homebrew:

brew tap petere/postgresql,

brew install <formula>(zB brew install petere/postgresql/postgresql-9.6)

Altes Postgre entfernen:

brew unlink postgresql

brew link -f postgresql-9.6

Wenn ein Fehler auftritt, vergessen Sie nicht, die Brauanweisungen in jedem Schritt zu lesen und zu befolgen.

Weitere Informationen finden Sie unter : https://github.com/petere/homebrew-postgresql


3

Eine alternative Antwort, die meines Erachtens noch niemand behandelt hat.

Wenn Sie mehrere PG-Cluster installiert haben (wie ich), können Sie diese mit anzeigen pg_lsclusters.

Sie sollten in der Lage sein, die Version und den Cluster aus der angezeigten Liste zu sehen.

Von dort aus können Sie dann Folgendes tun:

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

Ersetzen Sie natürlich den Versions- und Clusternamen durch den für Ihre Umstände geeigneten Namen, pg_lsclustersindem Sie die Version und den Cluster durch ein / trennen. Dies zielt auf den spezifischen Cluster ab, für den Sie ausgeführt werden möchten.


1
Das ist sehr nützlich. Da war ich verwirrt, warum pg_dumpnicht an einem meiner Cluster gearbeitet wurde. Es stellte sich heraus, dass die Standardversion von Postgresql verwendet wurde, als einer meiner Cluster auf eine neuere Version aktualisiert wurde. Durch Angabe des Clusters wurde das Problem behoben.
Andrius

3

Für mich war das Problem, dass das Aktualisieren psql apt-getneuere Versionen auch danach nicht mehr löste update. Folgendes hat funktioniert.

Ubuntu

Beginnen Sie mit dem Import des GPG-Schlüssels für PostgreSQL-Pakete.

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

Fügen Sie nun das Repository zu Ihrem System hinzu.

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

Installieren Sie PostgreSQL unter Ubuntu

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

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


1
Dies ersetzt nicht die vorhandenen ausführbaren Dateien auf Ihrem Computer. Daher müssen Sie explizit die neue Version von pg_dump verwenden, z. B. /usr/lib/postgresql/9.6/bin/pg_dump, oder eine neue Verknüpfung erstellen, z. B. / usr / bin / pg_dump96
27.

Ich musste das neue nicht explizit verwenden, es hat es aufgenommen.
Rado

2

Wenn Sie Docker installiert haben, können Sie Folgendes tun:

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

Dadurch wird der Docker-Container mit Postgres 9.2 heruntergeladen, pg_dumpim Container ausgeführt und die Ausgabe geschrieben.


2

Die Antwort klingt albern, aber wenn Sie den obigen Fehler erhalten und den pg_dump für eine frühere Version ausführen möchten, gehen Sie zum bin-Verzeichnis von postgres und geben Sie ein

./pg_dump Servername> out.sql ./ ignoriert das Stammverzeichnis und sucht im aktuellen Verzeichnis nach pg_dump


2

Ich hatte den gleichen Fehler und so habe ich ihn in meinem Fall gelöst. Dies bedeutet, dass Ihre Postgresql-Version 9.2.1 ist, Sie jedoch den Postgresql-Dienst 9.1.6 gestartet haben.

Wenn Sie laufen, werden psql postgresSie sehen:

psql (9.2.1, server 9.1.6)

Was ich getan habe, um dieses Problem zu lösen, ist:

  1. brew services stop postgresql@9.1.6
  2. brew services restart postgresql@9.2.1

Jetzt laufen psql postgresund du solltest haben:psql (9.2.1)

Sie können auch brew services listden Status Ihrer Postgres anzeigen.


1

** Nach der Installation stimmt die Postgres-Version überein (9.2) Erstellen Sie einen symbolischen Link oder eine neue Verknüpfung

** - auf '/ usr / bin'

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

Beispiel

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

- wie man aufruft: new_pg_dump -h 192.168.9.88 -U Postgres-Datenbank



1

Wenn die Datenbank auf einem anderen Computer installiert ist, ist wahrscheinlich die richtige Version von pg_dump installiert. Dies bedeutet, dass Sie den Befehl pg_dump mit SSH remote ausführen können: ssh username@dbserver pg_dump books > books.out

Sie können auch die Authentifizierung mit öffentlichem Schlüssel für die kennwortlose Ausführung verwenden. Schritte, um dies zu erreichen:

  1. Generieren Sie (falls noch nicht geschehen) ein Schlüsselpaar mit dem Befehl ssh-keygen.
  2. Kopieren Sie den öffentlichen Schlüssel auf den Datenbankserver, normalerweise ~ / .ssh / authorized_keys.
  3. Testen Sie, ob die Verbindung mit dem Befehl ssh funktioniert.

1

Nun, ich hatte das gleiche Problem, da ich zwei Postgress-Versionen installiert habe.

Verwenden Sie einfach den richtigen pg_dump und Sie müssen in Ihrem Fall nichts ändern:

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

0

Wenn Sie Herokus Postgres.app verwenden, befindet sich pg_dump (zusammen mit allen anderen Binärdateien) in /Applications/Postgres.app/Contents/MacOS/bin/

also in diesem Fall ist es

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

oder

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

um sie alle zu packen


0

Verwenden Sie für Macs find / -name pg_dump -type f 2>/dev/nullden Speicherort von pg_dump

Für mich habe ich folgende Ergebnisse:

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

Wenn Sie nicht verwenden möchten, verwenden Sie sudo ln -s new_pg_dump old_pg_dump --forceeinfach:

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dumppg_dumpin Ihrem Terminal zu ersetzen

Beispielsweise:

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

Für mich geht das!


0

Laden Sie hier die entsprechende Postgres-Version herunter:

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

Stellen Sie sicher, dass Sie die folgenden Befehle als sudo ausführen (die URL postgresql.org/download generiert die spezifische URL, die Sie verwenden können; die unten verwendete ist nur ein Beispiel für centos 7) als 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

Ihre pg_dump-Version sollte jetzt aktualisiert werden. Überprüfen Sie dies mit pg_dump -V


-6

Bei meiner Fedora 17-Installation ist ein ähnliches Problem aufgetreten. Dies ist, was ich getan habe, um das Problem zu umgehen

  • Löschen Sie das eingebaute pg_dumpum /usr/bin/pg_dump(als root: "rm / usr / bin / pg_dump")
  • Stellen Sie nun einen symbolischen Link zur Postgresql-Installation her

    Wieder als Wurzel ln -s /usr/pgsql-9.2/bin/pg_dump /usr/bin/pg_dump

Das sollte den Trick machen


9
Nonono, löschen Sie nicht nur paketverwaltete Dateien! Wenn es in /usr/( und nicht /usr/local/, /home/oder /opt/, wo die Dinge Löschen der Regel in Ordnung ist) , die Sie wirklich brauchen , den Paket - Manager verwenden - rpmund yumoder dpkgund apt-getoder aptitude, Distro-abhängig. Deinstallieren Sie das Paket entweder mit rpmoder ändern Sie Ihre PATHUmgebungsvariable in Ihrem, .bash_profilesodass zuerst die neuere Version gefunden wird. Wenn Sie Zweifel haben, dass etwas unter Paketverwaltung steht, verwenden Sie rpm -qf /path/to/file(RPM) oder dpkg -S /path/to/file(dpkg)
Craig Ringer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.