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?
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.
Dies ist mir bei der Verwendung von Heroku unter Ubuntu aufgefallen, und so habe ich es behoben:
Fügen Sie das apt-Repository von PostgreSQL hinzu, wie unter " Linux downloads (Ubuntu) " beschrieben. (Für andere Betriebssysteme gibt es ähnliche Seiten.)
Upgrade auf die neueste Version (9.3 für mich) mit:
Sudo apt-get install postgresql
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/...
.
Überprüfen Sie die installierten Versionen von pg_dump:
find / -name pg_dump -type f 2>/dev/null
Meine Ausgabe war:
/usr/pgsql-9.3/bin/pg_dump
/usr/bin/pg_dump
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.
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
.
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
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
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.
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
Für Mac-Benutzer An den Anfang der Profildatei.
export PATH="/Applications/Postgres.app/Contents/MacOS/bin:$PATH"
dann renne
. ~/.profile
Für diejenigen, die Postgres.app ausführen:
Fügen Sie Ihrem .bash_profile
den folgenden Code hinzu:
export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH
Terminal neu starten.
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
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.
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:
brew services stop [email protected]
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.
** 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
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!
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
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.
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
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:
Versuch das:
export PATH=/usr/local/bin:$PATH