Postgresql 9.2 mancata corrispondenza della versione pg_dump


141

Sto cercando di scaricare un database Postgresql usando lo strumento pg_dump .

$ pg_dump books > books.out

Come mai ricevo questo errore.

pg_dump: server version: 9.2.1; pg_dump version: 9.1.6
pg_dump: aborting because of server version mismatch

L' --ignore-versionopzione è ora obsoleta e non sarebbe davvero una soluzione al mio problema anche se avesse funzionato.

Come posso aggiornare pg_dump per risolvere questo problema?


Risposte:


27

Puoi installare PostgreSQL 9.2.1 nel pg_dumpcomputer client o semplicemente copiare il file $PGHOMEdal server PostgreSQL al computer client. Si noti che non è necessario initdbun nuovo cluster nel computer client.

Dopo aver completato l'installazione del software 9.2.1, ricordati di modificare alcune variabili di ambiente nel tuo .bash_profilefile.


75

L'ho riscontrato durante l'utilizzo di Heroku su Ubuntu, ed ecco come l'ho risolto:

  1. Aggiungi il repository apt PostgreSQL come descritto in " Download Linux (Ubuntu) ". (Esistono pagine simili per altri sistemi operativi.)

  2. Aggiorna all'ultima versione (9.3 per me) con:

    sudo apt-get install postgresql
  3. Ricrea il collegamento simbolico /usr/bincon:

    sudo ln -s /usr/lib/postgresql/9.3/bin/pg_dump /usr/bin/pg_dump --force

    Il numero di versione nel /usr/lib/postgresql/...percorso sopra dovrebbe corrispondere al server versionnumero nell'errore che hai ricevuto. Quindi, se il tuo errore dice pg_dump: server version: 9.9, quindi link a /usr/lib/postgresql/9.9/....


Questo succede solo quando aggiorni PostgreSQL. Ho appena fatto una nuova installazione del sistema operativo e non ho avuto problemi con questo.
Seth

Per chiunque si chieda, questa soluzione si applica anche a Ubuntu non Heroku.
IanBussieres,

2
Secondo quanto è stato detto in questa risposta , è anche una pessima idea.
Arthur,

Questa risposta consiglia di rimuovere il software eliminando una cartella. Qui stiamo solo ricreando un collegamento simbolico.
Seth,

2
Perfetto! Ricreare il collegamento simbolico dopo l'aggiornamento di postgres
Yo Ludke,

61
  1. Controlla le versioni installate di pg_dump:

    find / -name pg_dump -type f 2>/dev/null
  2. La mia uscita è stata:

    /usr/pgsql-9.3/bin/pg_dump
    /usr/bin/pg_dump
    
  3. Sono disponibili due versioni. Per aggiornare pg_dump con la versione più recente:

    sudo ln -s /usr/pgsql-9.3/bin/pg_dump /usr/bin/pg_dump --force

Ciò creerà il collegamento simbolico alla versione più recente.


2
È stato molto più veloce per me trovare le versioni usandolocate pg_dump
Obromios il

1
IMO, non dovresti aggiungerlo 2>/dev/nullpoiché questo eliminerà il flusso ERRORE anziché stamparlo sulla console. Penso che si dovrebbe voler vedere eventuali errori, tranne alcuni rari casi. Ad esempio, nel mio caso, mi ricorda che non ero root, quindi non riuscivo a vedere alcune directory in cui era installata la versione più recente di pg_dump. In generale, non rimuovere gli errori.
Poutrathor,

40

I Mac hanno un /usr/bin/pg_dumpcomando integrato che viene utilizzato come predefinito.

Con l'installazione di postgresql ottieni un altro binario su /Library/PostgreSQL/<version>/bin/pg_dump


3
La posizione varierà a seconda di come è stato installato PostgreSQL (programma di installazione EnterpriseDB, MacPorts, Homebrew, ecc.), Ma l'essenza della risposta - che l'utente probabilmente ha già la versione giusta già installata - è certamente giusta.
Craig Ringer,

3
Nel mio caso, aprire .bash_profile e aggiungere "export PATH = / Applications / Postgres.app / contents / macos / bin: $ PATH" ha fatto la magia.
Alex Weber,

29

Puoi semplicemente individuare pg_dumpe utilizzare l'intero percorso nel comando

locate pg_dump

/usr/bin/pg_dump
/usr/bin/pg_dumpall
/usr/lib/postgresql/9.3/bin/pg_dump
/usr/lib/postgresql/9.3/bin/pg_dumpall
/usr/lib/postgresql/9.6/bin/pg_dump
/usr/lib/postgresql/9.6/bin/pg_dumpall

Ora basta usare il percorso della versione desiderata nel comando

/usr/lib/postgresql/9.6/bin/pg_dump books > books.out

1
Per gli utenti CentOS (la mia versione è 6.9 finale):sudo /usr/pgsql-<version>/bin/pg_dump <database-name> -U <username> -h localhost
Davidson Lima,

@ jDub9 quale versione hai usato mentre prendevi la discarica? Assicurati di utilizzare lo stesso
Deepak Mahakale,

16

Se sei su Ubuntu, potresti avere una vecchia versione di postgresql-clientinstallata. In base alle versioni nel messaggio di errore, la soluzione sarebbe la seguente:

sudo apt-get remove postgresql-client-9.1
sudo apt-get install postgresql-client-9.2

11

Ogni volta che aggiorni o reinstalli una nuova versione di PostgreSQL, pg_dump viene installata una versione più recente di .

Deve esserci una PostgreSQL/bin directory da qualche parte sul tuo sistema, sotto l'ultima versione di PostgreSQL che hai installato (la 9.2.1 è la più recente) e prova a eseguire il pg_dump da lì dentro.


10
Suggerimento: in Terminal.app,find / -name pg_dump -type f 2>/dev/null
Craig Ringer

8

Per quelli che eseguono Postgres.app :

  1. Aggiungi il seguente codice al tuo .bash_profile:

    export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH
  2. Riavvia terminale.


7

Per Mac con Homebrew. Ho avuto questo problema durante il recupero del db da Heroku. L'ho risolto solo correndo:

brew upgrade postgresql

6

Per gli utenti mac mettere in cima al file .profile.

export PATH="/Applications/Postgres.app/Contents/MacOS/bin:$PATH"

quindi corri

. ~/.profile


3

Come spiegato, questo perché postgresql è nella vecchia versione -> aggiornalo per Mac tramite homebrew:

brew tap petere/postgresql,

brew install <formula>(ad es . brew install petere/postgresql/postgresql-9.6:)

Rimuovi vecchio postgre:

brew unlink postgresql

brew link -f postgresql-9.6

Se si verifica un errore, non dimenticare di leggere e seguire le istruzioni per la preparazione in ogni passaggio.

Dai un'occhiata qui: https://github.com/petere/homebrew-postgresql


3

Una risposta alternativa che non credo sia stata coperta da nessun altro.

Se hai installato più cluster PG (come faccio io), puoi visualizzarli utilizzando pg_lsclusters.

Dovresti essere in grado di vedere la versione e il cluster dall'elenco visualizzato.

Da lì, puoi quindi fare questo:

pg_dump --cluster=9.6/main books > books.out

Ovviamente, sostituisci la versione e il nome del cluster con quello appropriato per le tue circostanze da ciò che viene restituito pg_lsclustersseparando la versione e il cluster con un /. Questo è indirizzato al cluster specifico contro cui si desidera eseguire.


1
Questo è molto utile Dato che ero confuso, perché pg_dumpnon stavo lavorando su uno dei miei cluster. Si scopre che stava usando la versione Postgresql predefinita, quando uno dei miei cluster è stato aggiornato alla versione più recente. Specificare il cluster, risolto il problema.
Andrius,

3

Per me il problema era che l'aggiornamento psql apt-getnon risolveva le versioni più recenti, anche dopo update. Il seguente ha funzionato.

Ubuntu

Inizia con l'importazione della chiave GPG per i pacchetti PostgreSQL.

sudo apt-get install wget ca-certificates
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Ora aggiungi il repository al tuo sistema.

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'

Installa PostgreSQL su Ubuntu

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib

https://www.postgresql.org/download/linux/ubuntu/


1
Questo non sostituirà i file eseguibili esistenti sul tuo computer, quindi dovrai usare esplicitamente la nuova versione di pg_dump, ad es. /Usr/lib/postgresql/9.6/bin/pg_dump o creare un nuovo collegamento, ad esempio / usr / bin / pg_dump96
Vinh

Non ho dovuto usare esplicitamente il nuovo raccolto.
rado

2

Se hai installato la finestra mobile puoi fare qualcosa del tipo:

$ docker run postgres:9.2 pg_dump books > books.out

Ciò scaricherà il contenitore Docker con Postgres 9.2, verrà eseguito pg_dumpall'interno del contenitore e scriverà l'output.


2

La risposta suona sciocca ma se si ottiene l'errore sopra riportato e si desidera eseguire pg_dump per la versione precedente, andare nella directory bin di postgres e digitare

./pg_dump servername> out.sql ./ ignora la radice e cerca pg_dump nella directory corrente


2

Ho avuto lo stesso errore ed è così che l'ho risolto nel mio caso. Ciò significa che la tua versione postgresql è 9.2.1 ma hai avviato il servizio postgresql di 9.1.6.

Se corri psql postgresvedrai:

psql (9.2.1, server 9.1.6)

Quello che ho fatto per risolvere questo problema è:

  1. brew services stop postgresql@9.1.6
  2. brew services restart postgresql@9.2.1

Ora corri psql postgrese dovresti avere:psql (9.2.1)

Puoi anche correre brew services listper vedere lo stato dei tuoi postgres.


1

** dopo l'installazione la versione di postgres è match (9.2) Creare un collegamento simbolico o un nuovo collegamento

** - su '/ usr / bin'

syntag is = sudo ln -s [path for use] [new shortcut name]

esempio

sudo ln -s /usr/lib/postgresql/9.2/bin/pg_dump new_pg_dump

- come chiamare: new_pg_dump -h 192.168.9.88 -U database postgres



1

Se il database è installato su un altro computer, probabilmente ha installato la versione corretta di pg_dump. Ciò significa che puoi eseguire il comando pg_dump in remoto con SSH: ssh username@dbserver pg_dump books > books.out

È inoltre possibile utilizzare l'autenticazione con chiave pubblica per l'esecuzione senza password. I passaggi per raggiungere questo obiettivo:

  1. Genera (se non ancora fatto) una coppia di chiavi con il comando ssh-keygen.
  2. Copia la chiave pubblica sul server di database, in genere ~ / .ssh / authorized_keys.
  3. Verifica se la connessione funziona con il comando ssh.

1

Bene, ho avuto lo stesso problema con due versioni postgress installate.

Basta usare il pg_dump corretto e non è necessario cambiare nulla, nel tuo caso:

 $> /usr/lib/postgresql/9.2/bin/pg_dump books > books.out

0

Se stai usando Postgres.app di Heroku, si trova pg_dump (insieme a tutti gli altri binari) /Applications/Postgres.app/Contents/MacOS/bin/

quindi in quel caso lo è

ln -s /Applications/Postgres.app/Contents/MacOS/bin/pg_dump /usr/local/bin/pg_dump

o

ln -s /Applications/Postgres.app/Contents/MacOS/bin/* /usr/local/bin/.

per prenderli tutti


0

Per i Mac, usa find / -name pg_dump -type f 2>/dev/nulltrova la posizione di pg_dump

Per me, ho i seguenti risultati:

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dump
/usr/local/Cellar/postgresql/9.4.5_2/bin/pg_dump

Se non vuoi usare sudo ln -s new_pg_dump old_pg_dump --force, usa solo:

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dumpda sostituire con pg_dumpnel tuo terminale

Per esempio:

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dump books > books.out

Per me funziona!


0

Scarica qui la versione appropriata di postgres:

https://www.postgresql.org/download/

Assicurati di eseguire i seguenti comandi (l'URL postgresql.org/download genererà l'URL specifico da utilizzare; quello che uso di seguito è solo un esempio di centos 7) come sudo:

sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install postgresql11-server

la tua versione di pg_dump ora dovrebbe essere aggiornata, verifica con pg_dump -V


-6

Ho riscontrato un problema simile sulla mia installazione di Fedora 17. Questo è quello che ho fatto per aggirare il problema

  • Elimina il builtin pg_dumpin /usr/bin/pg_dump(come root: "rm / usr / bin / pg_dump")
  • Ora crea un collegamento simbolico all'installazione di postgresql

    Ancora come root ln -s /usr/pgsql-9.2/bin/pg_dump /usr/bin/pg_dump

Questo dovrebbe fare il trucco


9
Nonono, non solo eliminare i file gestiti dal pacchetto! Se è in /usr/(piuttosto che /usr/local/, /home/o /opt/, dove l'eliminazione delle cose è generalmente OK) è davvero necessario utilizzare il gestore dei pacchetti - rpme yumo dpkge apt-geto aptitude, distro-dipendente. Disinstallare il pacchetto con rpmo modificare la PATHvariabile di ambiente in .bash_profilemodo che sia trovata prima la versione più recente. In caso di dubbi su qualcosa che è sotto la gestione dei pacchetti, utilizzare rpm -qf /path/to/file(RPM) o dpkg -S /path/to/file(dpkg)
Craig Ringer
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.