pg_dump Version stimmt nicht mit Debian überein

8

Ich verwende PostgreSQL unter Debian Unstable / Sid. Ich habe die aktuellen Versionen bekommt (9.1) von postgresql, postgresql-client, postgresql-client-common(143) installiert ist .

Das Problem, das ich habe, ist zu versuchen zu rennen pg_dump. Ich erhalte diesen Fehler:

pg_dump: server version: 9.1.9; pg_dump version: 9.0.6
pg_dump: aborting because of server version mismatch

Ich kann anscheinend nicht herausfinden, wie ich eine neuere Version von bekomme pg_dump. Es scheint aus dem postgresql-client-commonPaket zu kommen, und ich habe versucht, darauf zu laufen apt-get --reinstall, aber das brachte mir keine neuere Version von pg_dump.

Wie kann ich das umgehen? Oder wo finde ich ein Paket mit einer neueren Version von pg_dump?

Supercheetah
quelle
Ist Ihnen klar, dass dies selbstverständlich ist, da Sie Debian Sid ausführen? Es ist instabil. Was which pg_dumpzeigt dir? Nur um zu bestätigen, dass es sich tatsächlich um die verpackte Version handelt und nicht um eine andere.
slm
Ja, das habe ich überprüft. Es zeigt /usr/bin/pg_dumpund dpkg -S /usr/bin/pg_dumpgibt mir postgresql-client-common: /usr/bin/pg_dump.
Supercheetah
Überprüfen Sie meine Antwort, um zu sehen, ob es hilft.
slm

Antworten:

3

Einige Optionen.

Laden Sie .deb 9.1 von der Postgres-Website herunter

Schauen Sie sich diese Seite mit dem Titel an: Linux-Downloads (Debian) - PostgreSQL . Sie können entweder eine aktualisierte .deb-Datei direkt von der Site herunterladen oder erneut auf deren Repository verweisen und einen Befehl wie den folgenden ausführen:

apt-get install postgresql-9.1

Debian Backports

Möglicherweise finden Sie hier bestimmte Versionen unter http://backports.debian.org/ .

Verwenden Sie eine generische Version

Sie können einen binären Build von PostgreSQL herunterladen und in Ihrem Home-Verzeichnis oder /optzum Beispiel installieren .

Laden Sie eines der Pre-Builds für den Unternehmensgebrauch herunter

Ich habe nicht viel Erfahrung mit diesen, aber Sie können möglicherweise eine dieser Versionen herunterladen , die einer generischen Version ähneln, und den Client aus der Installation verwenden, so wie er ist, und Ihre Datenbank sichern.

Cross-Distribution-Pakete

Sie können Pakete herunterladen , die so erstellt wurden, dass sie verteilungsunabhängig sind. Ich habe gerade die Version 9.1.9 heruntergeladen und sie enthält das pg_dumpTool.

Die Software wird entweder als .rpm oder .deb bereitgestellt und auf installiert /opt/postgres/9.1. Insbesondere wird das pg_dumpTool hier bereitgestellt : /opt/postgres/9.1/bin/pg_dump.

slm
quelle
Die Version von PostgreSQL ist nicht wirklich das Problem. Es ist die Version pg_dump, die alt und inkompatibel ist. Gibt es einen Ort, an dem ich genau das finden kann?
Supercheetah
Ich denke, es ist in diesen Paketen gebündelt. Ich würde einfach einen der Pre-Builds für die jeweilige Version herunterladen und den pg_dumpBefehl von dort aus verwenden. Sie sollten nicht installiert werden müssen, sondern nur nicht in einem Verzeichnis geteert sein. Möglicherweise müssen Sie eine Umgebungsvariable festlegen, die auf ein Bibliotheksverzeichnis verweist, dies sollte jedoch recht einfach sein.
slm
4

Eine andere Option, die für Sie geeignet sein könnte, ist die Deinstallation der alten parallelen Version:

auf debian / ubuntu:

sudo apt-get remove postgresql-8.4
sudo apt-get remove postgresql-client-8.4

Dadurch bleibt die spätere Version (z. B. 9.1) erhalten, in der nur die älteren 8.4-Client- und Server-Bibliotheken entfernt werden.

David Thomas
quelle
4

In meinem Fall hatte ich zwei Datenbanksätze, von denen einige auf der alten Version von Postgresql 8.4 und andere auf Version 9.1 ausgeführt wurden. Was ich getan habe, war, pg_dumpmit dem folgenden locateBefehl auf einem Linux-Computer zu suchen

$ locate pg_dump

/usr/bin/pg_dump
/usr/bin/pg_dumpall
/usr/lib/postgresql/8.4/bin/pg_dump
/usr/lib/postgresql/8.4/bin/pg_dumpall
/usr/lib/postgresql/9.1/bin/pg_dump
/usr/lib/postgresql/9.1/bin/pg_dumpall

Da die Standardeinstellung /usr/bin/pg_dumpfür Postgresql Version 8.4 ist, habe ich sie nur über die /usr/lib/postgresql/9.1/bin/pg_dumpBefehlszeile angegeben, wenn ich aus 9.1-Datenbanken ausgegeben habe, die auf einem anderen Port ausgeführt werden, und es hat funktioniert.

$ /usr/lib/postgresql/9.1/bin/pg_dump -p 5434
Erick
quelle
2

Zusätzlich zu den obigen Antworten können Sie pg_dumpund anderen Befehlen mitteilen , welche Version über die clusterOption verwendet werden soll. Zum Beispiel,

$pg_dump --cluster 9.1/main

wird auf die 9.1-Version abzielen.

Beachten Sie, dass dies verwendet wird pg_wrapper, was mit Ubuntu (Debian) kommt postgresql-commonund funktioniert . Beachten Sie auch, dass der Cluster ( im Beispiel) in Ihrer Einstellung möglicherweise anders ist.main

Weitere Informationen zu pg_wrapperfinden Sie in dieser DBA-Antwort .

Dennis
quelle
0

Ich bin heute auf dasselbe Problem gestoßen und Ericks Antwort scheint am genauesten zu sein. Das Problem ist wahrscheinlich, dass Sie verschiedene Versionen des postgresql-Clients haben und pg_dump nur den ältesten Client verwendet.

Sie können dies beheben, indem Sie den von ihm beschriebenen vollständigen Pfad verwenden. Ich habe jedoch eine einfachere Lösung gefunden, indem Sie das gemeinsame Paket postgresql-client (das alle Clients entfernt) entfernen und dann postgresql-client-9.3 neu installieren. Damit haben Sie nur die neuesten Versionen von pg_dump, die Sie wahrscheinlich wollen.

skylar
quelle