Postgresql 9.2 pg_dump versión no coincide

141

Estoy tratando de volcar una base de datos Postgresql usando la herramienta pg_dump .

$ pg_dump books > books.out

Cada vez que recibo este error.

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

La --ignore-versionopción ahora está en desuso y realmente no sería una solución a mi problema, incluso si hubiera funcionado.

¿Cómo puedo actualizar pg_dump para resolver este problema?

Chris Colla
fuente
pasos simples stackoverflow.com/a/42158528/4758119
Deepak Mahakale

Respuestas:

27

Puede instalar PostgreSQL 9.2.1 en la pg_dumpmáquina cliente o simplemente copiarlo $PGHOMEdesde la máquina del servidor PostgreSQL a la máquina cliente. Tenga en cuenta que no es necesario initdbun nuevo clúster en la máquina del cliente.

Una vez que haya terminado de instalar el software 9.2.1, recuerde editar algunas variables de entorno en su .bash_profilearchivo.

francos
fuente
75

Encontré esto mientras usaba Heroku en Ubuntu, y así es como lo solucioné:

  1. Agregue el repositorio apt PostgreSQL como se describe en " Descargas de Linux (Ubuntu) ". (Hay páginas similares para otros sistemas operativos).

  2. Actualice a la última versión (9.3 para mí) con:

    sudo apt-get install postgresql
  3. Recree el enlace simbólico /usr/bincon:

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

    El número de versión en la /usr/lib/postgresql/...ruta anterior debe coincidir con el server versionnúmero en el error que recibió. Entonces, si su error dice pg_dump: server version: 9.9, entonces enlace a /usr/lib/postgresql/9.9/....

Seth
fuente
Esto solo sucede cuando actualiza PostgreSQL. Acabo de hacer una nueva instalación del sistema operativo y no tuve ningún problema con esto.
Septiembre
Para cualquiera que se pregunte, esta solución se aplica también a Ubuntu que no sea Heroku.
IanBussieres
2
Según lo que se ha dicho en esta respuesta , también es una muy mala idea.
Arthur
Esa respuesta recomienda eliminar el software eliminando una carpeta. Aquí solo estamos recreando un enlace simbólico.
Seth
2
¡Perfecto! Recreando el enlace simbólico después de la actualización de postgres
Yo Ludke
61
  1. Verifique las versiones instaladas de pg_dump:

    find / -name pg_dump -type f 2>/dev/null
  2. Mi salida fue:

    /usr/pgsql-9.3/bin/pg_dump
    /usr/bin/pg_dump
  3. Hay dos versiones instaladas. Para actualizar pg_dump con la versión más reciente:

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

Esto creará el enlace simbólico a la versión más nueva.

Omer Aslam
fuente
2
Fue mucho más rápido para mí encontrar las versiones usandolocate pg_dump
Obromios
1
En mi opinión, no debe agregar 2>/dev/nullya que eso arrojará la secuencia de ERROR en lugar de imprimirla en la consola. Creo que uno debería querer ver algún error, excepto algunos casos raros. Por ejemplo, en mi caso, me recuerda que no era root, por lo que no puedo ver algunos directorios donde se instaló la versión más reciente de pg_dump. En general, no elimine los errores.
Poutrathor
40

Las Mac tienen un /usr/bin/pg_dumpcomando incorporado que se usa por defecto.

Con la instalación postgresql obtienes otro binario en /Library/PostgreSQL/<version>/bin/pg_dump

usuario2148301
fuente
3
La ubicación variará dependiendo de cómo se instaló PostgreSQL (instalador EnterpriseDB, MacPorts, Homebrew, etc.), pero la esencia de la respuesta, que el usuario probablemente ya tenga instalada la versión correcta, es ciertamente correcta.
Craig Ringer el
3
En mi caso, abrir .bash_profile y agregar "export PATH = / Applications / Postgres.app / contents / macos / bin: $ PATH" hizo la magia.
Alex Weber
29

Simplemente puede ubicar pg_dumpy usar la ruta completa al 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

Ahora solo use la ruta de la versión deseada en el comando

/usr/lib/postgresql/9.6/bin/pg_dump books > books.out
Deepak Mahakale
fuente
1
Para usuarios de CentOS (mi versión es la 6.9 Final):sudo /usr/pgsql-<version>/bin/pg_dump <database-name> -U <username> -h localhost
Davidson Lima,
@ jDub9, ¿qué versión usaste al hacer el volcado? Asegúrese de estar usando lo mismo
Deepak Mahakale
16

Si está en Ubuntu, es posible que tenga postgresql-clientinstalada una versión anterior . Según las versiones en su mensaje de error, la solución sería la siguiente:

sudo apt-get remove postgresql-client-9.1
sudo apt-get install postgresql-client-9.2
Abe Voelker
fuente
11

Cada vez que actualiza o reinstala una nueva versión de PostgreSQL, pg_dump se instala una última versión de .

Debe haber un PostgreSQL/bin directorio en algún lugar de su sistema, bajo la última versión de PostgreSQL que haya instalado (9.2.1 es la última) e intente ejecutarlo pg_dump desde allí.

solaimuruganv
fuente
10
Consejo: en Terminal.app,find / -name pg_dump -type f 2>/dev/null
Craig Ringer
8

Para aquellos que ejecutan Postgres.app :

  1. Agregue el siguiente código a su .bash_profile:

    export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH
  2. Reiniciar terminal.

Andreas
fuente
7

Para Mac con Homebrew. Tuve este problema al buscar el db de Heroku. Lo arreglé simplemente corriendo:

brew upgrade postgresql
hcarreras
fuente
6

Para usuarios de mac, coloque en la parte superior del archivo .profile.

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

entonces corre

. ~/.profile
Andrey Yasinishyn
fuente
3

Como se explicó, esto se debe a que su postgresql está en versión anterior -> actualícelo para Mac a través de homebrew:

brew tap petere/postgresql,

brew install <formula> (p.ej: brew install petere/postgresql/postgresql-9.6 )

Eliminar viejo postgre:

brew unlink postgresql

brew link -f postgresql-9.6

Si ocurre algún error, no olvide leer y seguir las instrucciones de preparación en cada paso.

Mira esto para más información: https://github.com/petere/homebrew-postgresql

ThangTD
fuente
3

Una respuesta alternativa que no creo que nadie más haya cubierto.

Si tiene varios clústeres PG instalados (como yo), puede verlos usando pg_lsclusters.

Debería poder ver la versión y el clúster de la lista que se muestra.

A partir de ahí, puede hacer esto:

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

Obviamente, reemplace la versión y el nombre del clúster con el apropiado para sus circunstancias de lo que se devuelve pg_lsclustersseparando la versión y el clúster con un /. Esto se dirige al clúster específico contra el que desea ejecutar.

ManoDestra
fuente
1
Esto es muy util. Como estaba confundido, ¿ pg_dumppor qué no estaba trabajando en uno de mis grupos? Resulta que estaba usando la versión predeterminada de Postgresql, cuando uno de mis clústeres se actualizó a una versión más nueva. Especificando cluster, resolvió el problema.
Andrius
3

Para mí, el problema era que la actualización psql apt-getno estaba resolviendo versiones más nuevas, incluso después deupdate . Lo siguiente funcionó.

Ubuntu

Comience con la importación de la clave GPG para los paquetes PostgreSQL.

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

Ahora agregue el repositorio a su 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'

Instalar PostgreSQL en Ubuntu

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

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

Glen Thompson
fuente
1
Esto no reemplazará los archivos ejecutables existentes en su computadora, por lo que deberá usar explícitamente la nueva versión de pg_dump, por ejemplo /usr/lib/postgresql/9.6/bin/pg_dump o crear un nuevo acceso directo, por ejemplo, / usr / bin / pg_dump96
Vinh
No tuve que usar explícitamente el nuevo que lo recogió.
rado
2

Si tiene instalada la ventana acoplable, puede hacer algo como:

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

Eso descargará el contenedor Docker con Postgres 9.2, se ejecutará pg_dumpdentro del contenedor y escribirá la salida.

mzsanford
fuente
2

La respuesta suena tonta, pero si obtiene el error anterior y desea ejecutar pg_dump para la versión anterior, vaya al directorio bin de postgres y escriba

./pg_dump servername> out.sql ./ ignora la raíz y busca pg_dump en el directorio actual

Joe Root
fuente
2

Tuve el mismo error y así es como lo resolví en mi caso. Esto significa que su versión postgresql es 9.2.1 pero ha iniciado el servicio postgresql de 9.1.6.

Si corres psql postgresverás:

psql (9.2.1, server 9.1.6)

Lo que hice para resolver este problema es:

  1. brew services stop [email protected]
  2. brew services restart [email protected]

Ahora corre psql postgres y deberías tener:psql (9.2.1)

También puedes correr brew services listpara ver el estado de tus postgres.

brillante
fuente
1

** después de instalar la versión de postgres coincide (9.2) Cree un enlace simbólico o un nuevo acceso directo

** - en '/ usr / bin'

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

ejemplo

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

- cómo llamar: new_pg_dump -h 192.168.9.88 -U base de datos postgres

ช่าง คอม ผู้ ยิ่ง ใหญ่
fuente
1

Trata eso:

export PATH=/usr/local/bin:$PATH
Benjamin Crouzier
fuente
1

Si la base de datos está instalada en una máquina diferente, probablemente tenga instalada la versión correcta de pg_dump. Esto significa que puede ejecutar el comando pg_dump de forma remota con SSH: ssh username@dbserver pg_dump books > books.out

También puede usar la autenticación de clave pública para la ejecución sin contraseña. Pasos para lograr eso:

  1. Genere (si aún no lo ha hecho) un par de claves con el comando ssh-keygen.
  2. Copie la clave pública en el servidor de la base de datos, generalmente ~ / .ssh / Authorized_keys.
  3. Pruebe si la conexión funciona con el comando ssh.
tomasz
fuente
1

Bueno, tuve el mismo problema ya que tengo instaladas dos versiones de postgreso.

Simplemente use el pg_dump adecuado y no necesita cambiar nada, en su caso:

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

Si está utilizando Postgres.app de Heroku, el pg_dump (junto con todos los otros binarios) está en /Applications/Postgres.app/Contents/MacOS/bin/

así que en ese caso es

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/.

simplemente agarrarlos a todos

mlebarron
fuente
0

Para Mac, use find / -name pg_dump -type f 2>/dev/nullbuscar la ubicación de pg_dump

Para mí, tengo los siguientes resultados:

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

Si no quieres usar sudo ln -s new_pg_dump old_pg_dump --force, solo usa:

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dumppara reemplazar con pg_dumpen su terminal

Por ejemplo:

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

¡Esto funciona para mi!

zhaoqing
fuente
0

Descargue la versión apropiada de postgres aquí:

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

Asegúrese de ejecutar los siguientes comandos (la URL postgresql.org/download generará la URL específica para que la use; la que uso a continuación es solo un ejemplo para centos 7) como 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

su versión de pg_dump ahora debe actualizarse, verifique con pg_dump -V

lobi
fuente
-6

Experimenté un problema similar en mi instalación de Fedora 17. Esto es lo que hice para solucionar el problema.

  • Eliminar el incorporado pg_dumpen /usr/bin/pg_dump(como raíz: "rm / usr / bin / pg_dump")
  • Ahora haga un enlace simbólico de la instalación postgresql

    De nuevo como root ln -s /usr/pgsql-9.2/bin/pg_dump /usr/bin/pg_dump

Eso debería hacer el truco

Joseph N.
fuente
9
Nonono, ¡no solo elimine los archivos administrados por paquetes! Si está en /usr/( en lugar de /usr/local/, /home/o /opt/, donde eliminar cosas está generalmente bien), realmente necesita usar el administrador de paquetes, rpm& yumor dpkgy apt-getor aptitude, dependiendo de la distribución. Desinstale el paquete con rpmo modifique su PATHvariable de entorno en su .bash_profilepara que la versión más nueva se encuentre primero. Si tiene dudas acerca de que algo esté bajo administración de paquetes, use rpm -qf /path/to/file(RPM) o dpkg -S /path/to/file(dpkg)
Craig Ringer el