it-swarm.com.de

Postgresql 9.2 pg_dump Versionskonflikt

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

$ pg_dump books > books.out

Wie immer bekomme ich 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-version-Option ist nun 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?

120
Chris Colla

Sie können PostgreSQL 9.2.1 entweder auf dem pg_dump-Clientcomputer installieren oder einfach den $PGHOME vom PostgreSQL-Servercomputer auf den Clientcomputer kopieren. Beachten Sie, dass kein initdb eines neuen Clusters auf dem Client-Computer erforderlich ist.

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

25
francs

Dies ist mir bei der Verwendung von Heroku unter Ubuntu aufgefallen, und so habe ich es behoben:

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

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

    Sudo apt-get install postgresql
    
  3. Erstellen Sie den symbolischen Link in /usr/bin mit:

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

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

65
Seth
  1. Überprüfen Sie die installierten Versionen 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. Um pg_dump mit der neueren Version zu aktualisieren:

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

Dadurch wird der Symlink zur neueren Version erstellt.

47
Omer Aslam

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

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

40
user2148301

Sie können einfach pg_dump suchen und den vollständigen Pfad im Befehl 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 nun einfach den Pfad der gewünschten Version im Befehl

/usr/lib/postgresql/9.6/bin/pg_dump books > books.out
24
Deepak Mahakale

Wenn Sie Ubuntu verwenden, ist möglicherweise eine alte Version von postgresql-client installiert. Basierend auf den Versionen in Ihrer Fehlermeldung würde die Lösung die folgende sein:

Sudo apt-get remove postgresql-client-9.1
Sudo apt-get install postgresql-client-9.2
15
Abe Voelker

Bei jeder Aktualisierung oder erneuten Installation einer neuen Version von PostgreSQL wird eine aktuelle Version von pg_dump installiert. 

Unter der neuesten Version von PostgreSQL, die Sie installiert haben (9.2.1 ist die neueste Version), muss sich irgendwo auf Ihrem System ein PostgreSQL/bin -Verzeichnis befinden. Versuchen Sie, dort die pg_dump auszuführen.

10
solaimuruganv

Für Macs mit Homebrew. Ich hatte dieses Problem, als ich die Datenbank von Heroku holte. Ich habe es gerade beim Laufen repariert:

brew upgrade postgresql
5
hcarreras

Für Mac-Benutzer An den Anfang der Profildatei.

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

dann renne 

. ~/.profile
5

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

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

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

3
Andreas

Wie bereits erwähnt, liegt dies daran, dass Ihr Postgresql in der alten Version ist -> update it Für Mac via Homebrew:

brew tap petere/postgresql

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

Alte Postgre entfernen:

brew unlink postgresql

brew link -f postgresql-9.6

Wenn ein Fehler auftritt, vergessen Sie nicht, die Anweisungen zum Brühen in jedem Schritt zu lesen.

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

2
ThangTD

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_dump im Container ausgeführt und die Ausgabe geschrieben.

1
mzsanford

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 von 9.1.6 gestartet haben.

Wenn Sie psql postgres ausführen, wird Folgendes angezeigt:

psql (9.2.1, server 9.1.6)

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

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

Führen Sie nun psql postgres aus und Sie sollten folgendes haben: psql (9.2.1)

Sie können auch brew services list ausführen, um den Status Ihrer Postgres anzuzeigen.

1
bright

** Nach der Installation ist postgres version match (9.2) Erstellen Sie einen symbolischen Link oder eine neue Verknüpfung

** - bei '/ 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

- Aufruf: new_pg_dump -h 192.168.9.88 -U Postgres-Datenbank

Nun, ich hatte das gleiche Problem, da ich zwei Postgres-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
1
Petr

Verwenden Sie für Macs find / -name pg_dump -type f 2>/dev/null, um den Ort von pg_dump zu finden

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 Sudo ln -s new_pg_dump old_pg_dump --force nicht verwenden möchten, verwenden Sie einfach:

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dump wird durch pg_dump in Ihrem Terminal ersetzt

Zum Beispiel:

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

Für mich geht das!

0
zhaoqing

Wenn Sie Heroku's Postgres.app verwenden, befindet sich der pg_dump (zusammen mit allen anderen Binaries) 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 einfach alle zu packen

0
mlebarron

Eine alternative Antwort, von der ich glaube, dass sie noch nicht abgedeckt ist.

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

Sie sollten die Version und den Cluster in der angezeigten Liste sehen können.

Von dort können Sie dann Folgendes tun:

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

Ersetzen Sie natürlich die Version und den Clusternamen durch den für Ihre Situation geeigneten Namen, der von pg_lsclusters zurückgegeben wird, wobei Version und Cluster durch ein/getrennt werden. Dies zielt auf den spezifischen Cluster ab, gegen den Sie ausführen möchten.

0
ManoDestra

Die Antwort klingt dumm, aber wenn Sie den obigen Fehler erhalten und den Befehl pg_dump für frühere Versionen ausführen möchten, gehen Sie in das bin-Verzeichnis von postgres und geben Sie ein 

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

0
Joe Root

Wenn die Datenbank auf einem anderen Computer installiert ist, ist wahrscheinlich die korrekte Version von pg_dump installiert. Das bedeutet, dass Sie den Befehl pg_dump mit SSH: .__ aus der Ferne ausführen können. ssh [email protected] pg_dump books > books.out

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

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

Versuch das: 

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