¿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).

Luis Masuelli
fuente
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.

Daniel Vérité
fuente
¿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

edilio
fuente