La versión de pg_dump no coincide en Debian

8

Estoy ejecutando PostgreSQL en Debian Unstable / Sid. Tengo las versiones actuales (9.1) de postgresql, postgresql-client, postgresql-client-common(143) instalado.

El problema que tengo es intentar ejecutar pg_dump. Recibo este error:

pg_dump: server version: 9.1.9; pg_dump version: 9.0.6
pg_dump: aborting because of server version mismatch

Parece que no puedo entender cómo obtener una versión más nueva de pg_dump. Parece provenir del postgresql-client-commonpaquete, y he intentado ejecutarlo apt-get --reinstall, pero eso no me dio una versión más nueva de pg_dump.

¿Cómo evito esto? ¿O dónde puedo encontrar un paquete con una versión más reciente de pg_dump?

supercheetah
fuente
¿Te das cuenta de que esto es normal para el curso ya que estás ejecutando Debian Sid? Es inestable ¿Qué which pg_dumpte muestra? Solo para confirmar que de hecho es la versión empaquetada y no otra.
slm
Sí, lo comprobé. Se muestra /usr/bin/pg_dumpy dpkg -S /usr/bin/pg_dumpme da postgresql-client-common: /usr/bin/pg_dump.
supercheetah
Mira mi respuesta, mira si ayuda.
slm

Respuestas:

3

Un par de opciones

Descargue .deb 9.1 desde el sitio de Postgres

Eche un vistazo a esta página titulada: Descargas de Linux (Debian) - PostgreSQL . Puede descargar un .deb actualizado del sitio directamente, o volver a apuntar a su repositorio y hacer un comando como este:

apt-get install postgresql-9.1

Backports de Debian

Puede encontrar versiones específicas aquí, http://backports.debian.org/ .

Use una versión genérica

Puede descargar una compilación binaria de PostgreSQL y colocar la instalación en su directorio de inicio o, /optpor ejemplo.

Descargue una de las compilaciones previas para uso empresarial

No tengo mucha experiencia con estos, pero es posible que pueda descargar uno de estos similar a una versión genérica y usar el cliente desde su instalación, como es, volcar su base de datos.

Paquetes de distribución cruzada

Puede descargar paquetes que se han creado para que sean independientes de la distribución. Acabo de descargar la versión 9.1.9 y sí incluye la pg_dumpherramienta.

El software se proporciona como .rpm o .deb y se instala en /opt/postgres/9.1. En concreto, el pg_dumpse proporciona la herramienta aquí: /opt/postgres/9.1/bin/pg_dump.

slm
fuente
La versión de PostgreSQL no es realmente el problema. Es la versión de pg_dumpeso es antigua e incompatible. ¿Hay algún lugar donde pueda encontrar específicamente eso?
supercheetah
Creo que está incluido con estos paquetes. Simplemente descargaría una de las compilaciones previas para la versión específica y usaría el pg_dumpcomando desde allí. No deberían tener que instalarse, solo no estar ordenadas en un directorio. Puede que tenga que establecer una variable de entorno para apuntar a un directorio de biblioteca, pero debería ser bastante sencillo.
slm
4

Otra opción, que puede ser adecuada para usted, es desinstalar la versión paralela anterior:

en debian / ubuntu:

sudo apt-get remove postgresql-8.4
sudo apt-get remove postgresql-client-8.4

Eso conserva la versión posterior (por ejemplo, 9.1) eliminando solo las bibliotecas de cliente y servidor 8.4 anteriores.

David Thomas
fuente
4

En mi caso, tenía dos conjuntos de bases de datos, algunos con la versión anterior de Postgresql 8.4 y otros con la versión 9.1. Lo que hice fue localizar pg_dumpen la máquina Linux usando el locatecomando a continuación

$ locate pg_dump

/usr/bin/pg_dump
/usr/bin/pg_dumpall
/usr/lib/postgresql/8.4/bin/pg_dump
/usr/lib/postgresql/8.4/bin/pg_dumpall
/usr/lib/postgresql/9.1/bin/pg_dump
/usr/lib/postgresql/9.1/bin/pg_dumpall

Dado que el valor predeterminado /usr/bin/pg_dumpes Postgresql versión 8.4, acabo de especificar /usr/lib/postgresql/9.1/bin/pg_dumpdesde la línea de comandos al volcar desde bases de datos 9.1 que se ejecutan en un puerto diferente y funcionó.

$ /usr/lib/postgresql/9.1/bin/pg_dump -p 5434
Erick
fuente
2

Además de las respuestas anteriores, también puede decirle pg_dumpy otros comandos, qué versión usar a través de la clusteropción. Por ejemplo,

$pg_dump --cluster 9.1/main

apuntará a la versión 9.1.

Tenga en cuenta que esto hace uso de pg_wrapper, que viene con Ubuntupostgresql-common y funciona en Ubuntu (Debian). También tenga en cuenta que el clúster ( mainen el ejemplo) puede ser diferente en su configuración.

Se pg_wrapperpuede encontrar más información sobre en esta respuesta de DBA .

Dennis
fuente
0

Me encontré con el mismo problema hoy y la respuesta de Erick parece ser la más precisa. El problema es probable que tenga diferentes versiones del postgresql-client y pg_dump solo esté usando el cliente más antiguo.

Puede resolver esto utilizando la ruta completa como él describió, pero encontré una solución más fácil para eliminar el paquete postgresql-client-common (que elimina todos los clientes), luego reinstalar postgresql-client-9.3. Esto te deja con solo las últimas versiones de pg_dump que probablemente quieras que quieras.

skylar
fuente