Como soluciono uma "incompatibilidade de versão do servidor" com o pg_dump quando preciso de dois servidores PostgreSQL instalados?

13

Eu instalei dois servidores PostgreSQL no meu computador. Um é 9.1 e o outro é 9.3. Eu preciso dos dois servidores instalados.

Quando executo o pg_dump, no entanto, 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 o 9.1 primeiro e o 9.3 muitos meses depois - preciso dos dois servidores de banco de dados instalados).

Luis Masuelli
fonte
Execute explicitamente a versão 9.3 do pg_dump. Ambos estão instalados, mas apenas um é o padrão. Veja update-alternativesos caminhos ou dpkg -Lo pacote do cliente postgresql para ver onde eles estão. Não tenha acesso imediato a uma caixa do Ubuntu para mostrar você mesmo.
Craig Ringer
Não podes. O comando pg_dump está sendo executado em outro aplicativo.
18743 Luis Masuelli
Você precisará alterar a PATHvariável de ambiente com a qual o aplicativo é executado.
Craig Ringer
Eu tive o mesmo problema. Eu tive que instalar através do repositório apt PostgreSQL: askubuntu.com/a/831293/448857
neoneye

Respostas:

16

TL; DR : se as duas instâncias do PostgreSQL forem gerenciadas pelos pacotes Ubuntu (como deveriam), basta usar a --clusteropção para selecionar a instância do PostgreSQL para backup, e ela 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: como instalado pelos pacotes do Ubuntu, /usr/bin/pg_dumpé na verdade um link para /usr/share/postgresql-common/pg_wrapper, cujo objetivo é exatamente selecionar a instância correta e executar o binário correspondente. --clusternão existe nos comandos padrão do PostgreSQL, é uma adição ao Debian / Ubuntu que visa solucionar esse problema de múltiplas versões / caminhos múltiplos.

Este é o mesmo para psql, createdb, createuser, etc. cerca de 18 comandos Postgres em /usr/binsão realmente gerido pelo pg_wrapper.

Veja man pg_wrapper para mais.

Daniel Vérité
fonte
para que serve a versão / main? o que é principal?
Alexander Mills
11
@AlexanderMills: version= versão principal do postgresql e main= nome padrão do cluster. Veja as páginas de manual de pg_lsclusters e pg_wrapper.
Daniel Vérité
7

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

edilio
fonte