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.