¿Cómo soluciono una "no coincidencia de versiones del servidor" con pg_dump cuando necesito AMBOS servidores PostgreSQL instalados?

¿Cómo soluciono una "no coincidencia de versiones del servidor" con pg_dump cuando necesito AMBOS servidores PostgreSQL instalados?

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 no coincidencia de versiones:

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; necesitoambosservidores de bases de datos instalados).

Respuesta1

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 realizar la copia de seguridad y automáticamente elegirá 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, ejecútelo pg_lsclusterspara ver sus nombres reales en la Clustercolumna.

Cómo funciona: tal como lo instalan los paquetes de Ubuntu, /usr/bin/pg_dumpes en realidad 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 estándar de PostgreSQL, es una adición de Debian/Ubuntu que está destinada a abordar este problema de múltiples versiones/múltiples rutas.

Esto es lo mismo para psql, createdb, createuser, etc. En /usr/binrealidad, alrededor de 18 comandos de Postgres son administrados por pg_wrapper.

Verhombre pg_wrapperpara más.

Respuesta2

Puedes usar:

sudo find / -name pg_dump

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

entonces lo siguiente que podemos hacer:

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

para actualizar al que necesitamos

Respuesta3

Si está ejecutando Docker, puede ejecutar cualquier versión de pg_dump sin tener que administrar múltiples instalaciones. Esto escribirá un archivo /path/to/dump/to/myfilename.dumpusando postgres 12.5:

docker run --rm --network=host -v "/path/to/dump/to:/tmp/dump" \
  postgres:12.5 pg_dump -Fc -v --dbname="my_db_bame" -f "/tmp/dump/myfilename.dump"
  • --rmelimina el contenedor cuando finaliza el comando
  • --network=hostconecta el contenedor a la red local del host
  • -v ...monta su directorio de host ( /path/to/dump/to) en un directorio temporal dentro del contenedor

Solo debe asegurarse de que el directorio en el que monta ( /tmp/dump) sea el mismo que el directorio en el que escribe pg_dump.

Luego puedes cambiar 12.5 a la versión que quieras.

información relacionada