
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 --cluster
opçã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_lsclusters
para ver seus nomes reais na Cluster
coluna.
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. --cluster
nã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/bin
são gerenciados por pg_wrapper
.
Verhomem pg_wrapperpara mais.
Responder2
Você pode usar:
sudo find / -name pg_dump
para encontrar suas versões pg_dump
no 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.dump
usando 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"
--rm
remove o contêiner quando o comando é concluído--network=host
conecta 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.