Wie löse ich eine Nichtübereinstimmung der Serverversion mit pg_dump, wenn BEIDE PostgreSQL-Server installiert sein müssen?

13

Ich habe zwei PostgreSQL-Server auf meinem Computer installiert. Einer ist 9.1 und der andere ist 9.3. Ich muss beide Server installiert haben.

Wenn ich jedoch pg_dump ausführe, wird ein Versionsfehler angezeigt:

server version: 9.3.6; pg_dump version: 9.1.15
pg_dump: aborting because of server version mismatch

Wie kann ich das lösen? ( Beide Versionen können nicht deinstalliert werden. Ich habe die Version 9.1 zuerst und die Version 9.3 viele Monate später installiert. Ich muss beide Datenbankserver installieren.)

Luis Masuelli
quelle
Führen Sie explizit die 9.3-Version von aus pg_dump. Beide sind installiert, aber nur einer ist die Standardeinstellung. Suchen Sie update-alternativesnach den Pfaden oder dpkg -Ldem Postgresql-Client-Paket, um zu sehen, wo sie sich befinden. Sie haben keinen sofortigen Zugriff auf eine Ubuntu-Box, um sich selbst zu zeigen.
Craig Ringer
Kann nicht. Der Befehl pg_dump wird von einer anderen Anwendung ausgeführt.
Luis Masuelli
PATHDann müssen Sie die Umgebungsvariable ändern, mit der die App ausgeführt wird.
Craig Ringer
Ich hatte das gleiche Problem. Ich musste über das PostgreSQL apt Repository installieren: askubuntu.com/a/831293/448857
neoneye

Antworten:

16

TL; DR : Wenn beide PostgreSQL-Instanzen von den Ubuntu-Paketen verwaltet werden (wie sie sollten), verwenden Sie einfach die --clusterOption, um die zu sichernde PostgreSQL-Instanz auszuwählen, und es wird automatisch die entsprechende Version von pg_dump ausgewählt:

pg_dump --cluster 9.1/main [other pg_dump options]

oder

pg_dump --cluster 9.3/main [other pg_dump options].

mainist nur ein Standardwert, führen Sie aus pg_lsclusters, um Ihre tatsächlichen Namen in der ClusterSpalte anzuzeigen.

So funktioniert es: Wie von den Ubuntu-Paketen installiert, /usr/bin/pg_dumphandelt es sich tatsächlich um einen Softlink zu /usr/share/postgresql-common/pg_wrapper, dessen Zweck es ist, genau die richtige Instanz auszuwählen und die entsprechende Binärdatei auszuführen. --clusterist in den Standard-PostgreSQL-Befehlen nicht vorhanden. Es handelt sich um eine Debian / Ubuntu-Ergänzung, mit der dieses Problem mit mehreren Versionen / mehreren Pfaden behoben werden soll.

Dies ist das gleiche für psql, createdb, createuserusw. etwa 18 Postgres Befehle in /usr/bindurch tatsächlich geschaffen pg_wrapper.

Weitere Informationen finden Sie unter man pg_wrapper .

Daniel Vérité
quelle
Wofür ist die Version / Main? Was ist Haupt?
Alexander Mills
1
@AlexanderMills: version= Hauptversion von postgresql und main= Standardname des Clusters. Siehe die Manpages von pg_lsclusters und pg_wrapper.
Daniel Vérité
6

Sie können verwenden:

sudo find / -name pg_dump

um deine Versionen von pg_dumpin meinem Fall zu finden:/usr/pgsql-9.6/bin/pg_dump

Also können wir als nächstes tun:

sudo ln -sfn /usr/pgsql-9.6/bin/pg_dump /usr/bin/pg_dump

um auf das zu aktualisieren, was wir brauchen

edilio
quelle