Come eseguire la versione specifica (8.4, 9.1) del comando postgresql pg_ * (ad es. Pg_dump)


11

Ho installato Postgresql versioni 8.4 e 9.1. Per ogni dato comando Postgresql, come posso specificare una versione specifica del comando da eseguire? (ad esempio, psql, pg_dump, pg_ctlcluster, pg_restore, ...)

La mia domanda è motivata dal voler fare un pg_dump in preparazione per un aggiornamento da 8.4 a 9.1, e voglio sapere quale versione di pg_dump sto eseguendo.

Sono in esecuzione su Ubuntu 10.04 Natty.

Risposte:


15

Sei su Ubuntu e ovviamente hai pg_wrapperinstallato Martin Pitt (a giudicare da pg_ctlcluster) fornito dal pacchetto postgresql-commone fornito con i pacchetti Debian standard. Uso lo stesso su Debian .

Su un sistema Linux, esegui whichnella shell per vedere quale eseguibile viene effettivamente selezionato:

postgres@db:~$ which pg_dump
/usr/bin/pg_dump
postgres@db:~$ ls -l /usr/bin/pg_dump
lrwxrwxrwx 1 root root 37  4. Jun 18:57 /usr/bin/pg_dump -> ../share/postgresql-common/pg_wrapper

pg_dumpè in realtà un collegamento simbolico a pg_wrapper, che seleziona dinamicamente la versione appropriata del programma client per il cluster db con cui si esegue pg_dump. Cito la pagina man di pg_wrapper:

Questo programma viene eseguito solo come collegamento a nomi che corrispondono ai programmi PostgreSQL in / usr / lib / postgresql / version / bin. Determina il cluster e il database configurati per l'utente e chiama la versione appropriata del programma desiderato per connettersi a quel cluster e database, fornendo tutte le opzioni specificate a quel comando.

   The target cluster is selected by the following means, in descending order of precedence:
   1.  explicit specification with the --cluster option
   2.  explicit specification with the PGCLUSTER environment variable
   3.  matching entry in ~/.postgresqlrc (see postgresqlrc(5)), if that file exists
   4.  matching entry in /etc/postgresql-common/user_clusters (see user_clusters(5)), if that file exists
   5.  If only one local cluster exists, that one will be selected.
   6.  If several local clusters exist, the one listening on the default port 5432 will be selected.

   If none of these rules match, pg_wrapper aborts with an error.

IOW, la versione giusta dovrebbe essere scelta automagicamente, a meno che tu non abbia rovinato l'installazione in qualche modo. Puoi sempre aggiungere l'opzione --clusterper essere specifici.


1
Solo una nota: questo non aiuta con le connessioni remote. Ho installato gli strumenti client 8.3 e 9.1 e il valore predefinito è 8.3 per qualche motivo. Devo selezionare manualmente il percorso in / usr / lib per usare la versione corretta. Avrei pensato che il più recente sarebbe stato usato di default, ma non sembra.
Sami Kuhmonen,

Non è necessario il più recente, ma quello corrispondente al database. Per alcuni scopi, tuttavia, la nuova versione di pg_dump potrebbe essere l'opzione migliore.
Erwin Brandstetter,

Puoi chiarire cosa deve essere esattamente nel file ~ / .postgreslqrc? L'output del mio client -> psql (8.4.21, server 9.1.13) ATTENZIONE: versione psql 8.4, versione server 9.1. Alcune funzionalità di psql potrebbero non funzionare.
Croydon Dias,

Non sembra funzionare per me. Ho creato un dump su un server con 9.1 e quando ho provato a ripristinare su un altro server con 9.1 e 8.4, mi dice che non è in grado di riconoscere il formato del file. Inoltre, non esiste alcuna --clusteropzione da riga di comando.
Alexis Wilke,

4

Io uso

PGCLUSTER=8.4/main pg_dump ...
PGCLUSTER=9.1/main pg_dump ...
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.