Como resolvo uma "incompatibilidade de versão do servidor" com o pg_dump quando preciso de AMBOS os servidores PostgreSQL instalados?

Como resolvo uma "incompatibilidade de versão do servidor" com o pg_dump quando preciso de AMBOS os servidores PostgreSQL instalados?

Instalei dois servidores PostgreSQL no meu computador. Um é 9,1 e o outro é 9,3. Preciso de ambos os servidores instalados.

No entanto, quando executo o pg_dump, recebo um erro de incompatibilidade de versão:

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

Como posso resolver isso? (Não é possível desinstalar nenhuma das versões - instalei a 9.1 primeiro e a 9.3 muitos meses depois - precisoambosservidores de banco de dados instalados).

Responder1

DR: se ambas as instâncias do PostgreSQL forem gerenciadas pelos pacotes Ubuntu (como deveriam), basta usar a --clusteropção de selecionar a instância do PostgreSQL para backup, e ele escolherá automaticamente a versão correspondente do pg_dump:

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

ou

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

mainé apenas um valor padrão, execute pg_lsclusterspara ver seus nomes reais na Clustercoluna.

Como funciona: conforme instalado pelos pacotes do Ubuntu, /usr/bin/pg_dumpé na verdade um soft-link para /usr/share/postgresql-common/pg_wrapper, cujo objetivo é justamente selecionar a instância correta e executar o binário correspondente. --clusternão existe nos comandos padrão do PostgreSQL, é uma adição do Debian/Ubuntu que se destina a resolver esse problema de múltiplas versões/múltiplos caminhos.

Isso é o mesmo para psql, createdb, createuser, etc. cerca de 18 comandos postgres /usr/binsão gerenciados por pg_wrapper.

Verhomem pg_wrapperpara mais.

Responder2

Você pode usar:

sudo find / -name pg_dump

para encontrar suas versões pg_dumpno meu caso:/usr/pgsql-9.6/bin/pg_dump

então a seguir podemos fazer:

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

para atualizar para o que precisamos

Responder3

Se você estiver executando o docker, poderá executar qualquer versão do pg_dump sem precisar gerenciar várias instalações. Isto irá gravar um arquivo /path/to/dump/to/myfilename.dumpusando o 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"
  • --rmremove o contêiner quando o comando é concluído
  • --network=hostconecta o contêiner à rede local host
  • -v ...monta seu diretório host ( /path/to/dump/to) em um diretório temporário dentro do contêiner

Você apenas precisa ter certeza de que o diretório em que você monta ( /tmp/dump) é o mesmo que o diretório no qual o pg_dump está gravando.

Então você pode alterar 12.5 para qualquer versão que desejar.

informação relacionada