¿Cómo resuelvo un "desajuste de la versión del servidor" con pg_dump cuando necesito instalar AMBOS servidores PostgreSQL?


13

Instalé dos servidores PostgreSQL en mi computadora. Uno es 9.1 y el otro es 9.3. Necesito ambos servidores instalados.

Sin embargo, cuando ejecuto pg_dump, aparece un error de desajuste de versión:

server version: 9.3.6; pg_dump version: 9.1.15
pg_dump: aborting because of server version mismatch

¿Cómo puedo resolverlo? (No puedo desinstalar ninguna de las versiones: instalé la 9.1 primero y la 9.3 muchos meses después, necesito instalar ambos servidores de bases de datos).


Ejecute explícitamente la versión 9.3 de pg_dump. Ambos están instalados, pero solo uno es el predeterminado. Consulte update-alternativeslas rutas o dpkg -Lel paquete de cliente postgresql para ver dónde están. No tengo acceso inmediato a un cuadro de Ubuntu para mostrarte yo mismo.
— Craig Ringer

No puedo. El comando pg_dump se ejecuta desde otra aplicación.
— Luis Masuelli

Tendrás que cambiar la PATHvariable de entorno con la que se ejecuta la aplicación, entonces.
— Craig Ringer

Yo tuve el mismo problema. Tuve que instalar a través del repositorio apto de PostgreSQL: askubuntu.com/a/831293/448857
— neoneye

Respuestas:


16

TL; DR : si ambas instancias de PostgreSQL son administradas por los paquetes de Ubuntu (como deberían), simplemente use la --clusteropción para seleccionar la instancia de PostgreSQL para hacer una copia de seguridad, y elegirá automáticamente la versión correspondiente de pg_dump:

pg_dump --cluster 9.1/main [other pg_dump options]

o

pg_dump --cluster 9.3/main [other pg_dump options].

maines solo un valor predeterminado, ejecute pg_lsclusterspara ver sus nombres reales en la Clustercolumna.

Cómo funciona: tal como lo instalan los paquetes de Ubuntu, en /usr/bin/pg_dumprealidad es un enlace suave a /usr/share/postgresql-common/pg_wrapper, cuyo propósito es precisamente seleccionar la instancia correcta y ejecutar el binario correspondiente. --clusterno existe en los comandos comunes de PostgreSQL, es una adición de Debian / Ubuntu que está destinada a abordar este problema de múltiples versiones / múltiples rutas.

Esta es la misma para psql, createdb, createuser, etc. alrededor de 18 órdenes de Postgres en /usr/binrealidad están gestionados por pg_wrapper.

Ver man pg_wrapper para más.


¿Para qué es la versión / main? ¿Qué es principal?
— Alexander Mills

1
@AlexanderMills: version= versión principal de postgresql y main= nombre predeterminado del clúster. Consulte las páginas de manual de pg_lsclusters y pg_wrapper.
— Daniel Vérité

7

Puedes usar:

sudo find / -name pg_dump

para encontrar sus versiones de pg_dumpen mi caso:/usr/pgsql-9.6/bin/pg_dump

así que a continuación podemos hacer:

sudo ln -sfn /usr/pgsql-9.6/bin/pg_dump /usr/bin/pg_dump

para actualizar a la que necesitamos

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.