Come posso risolvere una "mancata corrispondenza della versione del server" con pg_dump quando ho bisogno di ENTRAMBI i server PostgreSQL installati?


13

Ho installato due server PostgreSQL sul mio computer. Uno è 9.1 e l'altro è 9.3. Ho bisogno di entrambi i server installati.

Quando eseguo pg_dump, tuttavia, viene visualizzato un errore di mancata corrispondenza della versione:

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

Come posso risolverlo? (Non è possibile disinstallare nessuna delle versioni - ho installato prima la 9.1 e la 9.3 molti mesi dopo - Ho bisogno di entrambi i server di database installati).


Eseguire esplicitamente la versione 9.3 di pg_dump. Entrambi sono installati, ma solo uno è il valore predefinito. Controlla update-alternativesi percorsi o dpkg -Lil pacchetto client postgresql per vedere dove si trovano. Non ho accesso immediato a una scatola di Ubuntu per mostrarti te stesso.
Craig Ringer,

Non può. Il comando pg_dump viene eseguito da un'altra applicazione.
Luis Masuelli,

Dovrai quindi modificare la PATHvariabile di ambiente con cui viene eseguita l'app.
Craig Ringer,

Ho avuto lo stesso problema. Ho dovuto installare tramite il repository apt PostgreSQL: askubuntu.com/a/831293/448857
neoneye

Risposte:


16

TL; DR : se entrambe le istanze PostgreSQL sono gestite dai pacchetti Ubuntu (come dovrebbero), basta usare l' --clusteropzione per selezionare l'istanza PostgreSQL per il backup e sceglierà automaticamente la versione corrispondente di pg_dump:

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

o

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

mainè solo un valore predefinito, esegui pg_lsclustersper vedere i tuoi nomi effettivi nella Clustercolonna.

Come funziona: come installato dai pacchetti Ubuntu, /usr/bin/pg_dumpè in realtà un soft-link /usr/share/postgresql-common/pg_wrapper, il cui scopo è proprio quello di selezionare l'istanza corretta ed eseguire il binario corrispondente. --clusternon esiste nei comandi PostgreSQL di serie, è un'aggiunta Debian / Ubuntu che ha lo scopo di risolvere questo problema di versioni multiple / percorsi multipli.

Questo è lo stesso per psql, createdb, createuser, ecc circa 18 comandi postgres in /usr/binsiano effettivamente gestite da pg_wrapper.

Vedi man pg_wrapper per ulteriori informazioni.


a cosa serve la versione / main? qual è il principale?
Alexander Mills,

1
@AlexanderMills: version= versione principale di postgresql e main= nome predefinito del cluster. Vedi le manpage di pg_lsclusters e pg_wrapper.
Daniel Vérité,

7

Puoi usare:

sudo find / -name pg_dump

per trovare le tue versioni di pg_dumpnel mio caso:/usr/pgsql-9.6/bin/pg_dump

quindi dopo possiamo fare:

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

per aggiornare a quello di cui abbiamo bisogno

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.