Versão incorreta do pg_dump no Ubuntu

4

Eu originalmente instalei o postgres 9.2 no Ubuntu e depois atualizei para o 9.3 de acordo com as instruções aqui: link ( usando o repositório postgres apt).

No entanto, o pg_dump, que é um alias para / usr / share / postgresql-common / pg_wrapper, não foi atualizado.

pg_dump: server version: 9.3.4; pg_dump version: 9.2.8
pg_dump: aborting because of server version mismatch

Como faço upgrade? Eu tentei descobrir quais pacotes exigem atualização, mas não tenho certeza se essa é a coisa correta a ser feita.

    
por Bill 08.07.2014 / 01:34

3 respostas

7

Acontece que a instalação do cliente 9.3 não desinstala automaticamente o cliente 9.2 e, se ambos estiverem na máquina assim, é isso que você obtém. A resposta é remover o postgresql-client-9.2 (ou qualquer que seja a versão antiga apropriada no seu caso).

    
por 26.07.2014 / 00:36
4

você pode querer verificar a saída do comando

dpkg -l | grep postgres

para ver quais versões estão instaladas e ativas O pg_dump geralmente faz parte do pacote postgresql-client-common.

(E edite sua pergunta, não está claro como você atualizou da versão 9.3 para 9.3 ...)

    
por 20.07.2014 / 00:40
0

tl: dr; não é necessário desinstalar clusters antigos. Em vez disso, coloque o seguinte em ~/.postgresqlrc

<version> <clustername> <defaultdb> ,

por exemplo, 9.6 main *

Não é necessário desinstalar clusters antigos. Eu olhei em /usr/share/postgresql-common/pg_wrapper , que tem estas linhas:

# for psql we always want the latest version, as this is backwards 
compatible
# to every major version that that we support
if ($cmdname eq 'pg_wrapper') {
    error "pg_wrapper should not be called directly, but through a symlink";
} elsif ($cmdname =~ /^(psql|pg_archivecleanup|pg_isready)$/) {
    $cmd = get_program_path ($cmdname, get_newest_version);
} else {
    $cmd = get_program_path ($cmdname, $version);
}

Em outras palavras, comandos como psql sempre serão executados com a última versão instalada instalada em sua máquina, mas comandos como pg_dump não serão.

No topo de pg_wrapper é uma dica:

# Call a PostgreSQL client program with the version, cluster and default
# database specified in ~/.postgresqlrc or
# /etc/postgresql-common/user_clusters.

man postgresqlrc nos informa que ~/.postgresqlrc deve ser formatado dessa forma:

<version> <cluster name> <default database

pg_lsclusters me forneceu a seguinte saída:

Ver Cluster Port Status Owner    Data directory               Log file
9.5 main    5432 online postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log
9.6 main    5433 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

O que significa que meu ~/.postgresqlrc deve ficar assim:

9.6 main *

O que me dá a versão desejada quando eu corro pg_dump -V .

    
por 29.03.2018 / 07:49