web-dev-qa-db-ja.com

Ubuntuのpg_dumpのバージョンが間違っています

私はもともとpostgres 9.2をUbuntuにインストールし、後で指示に従って9.3にアップグレードしました: http://www.postgresql.org/download/linux/ubuntu/ (postgres aptリポジトリを使用)。

ただし、/ usr/share/postgresql-common/pg_wrapperのエイリアスであるpg_dumpはアップグレードされませんでした。

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

どうすればアップグレードできますか?更新が必要なパッケージを特定しようとしましたが、それが正しいことであるかどうかは本当にわかりません。

6
Bill

9.3クライアントをインストールしても9.2クライアントは自動的にアンインストールされないことがわかりました。両方がこのようなマシンにある場合は、それが得られます。答えは、postgresql-client-9.2(またはあなたのケースでは適切な古いバージョンであれば何でも)を削除することです。

10
Bill

コマンドの出力を確認することができます

dpkg -l | grep postgres

インストールされているバージョンを確認し、アクティブなpg_dumpは通常、postgresql-client-commonパッケージの一部です。

(そして質問を編集してください、バージョン9.3から9.3にどのようにアップグレードしたのかは明確ではありません...)

4
stimur

私も同じ問題に直面していました。まず、古いpgdumpバージョンを削除しました。主にpostres-clientの一部です。したがって、それらを使用して削除します

apt-getはpostgresql-client-commonを削除します

次のコマンドを実行して、要件に応じたバージョンをインストールします。私はubuntu 16.04を使用しています。最初のコマンドで、「xenial」をubuntuのバージョンに置き換えます。 Ubuntuのバージョンを確認するコマンド-
cat /etc/os-release

$ echo "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main"> /etc/apt/sources.list.d/pgdg.list
$ wget --quiet -O- https://www.postgresql.org/media/keys/ACCC4CF8.asc | Sudo apt-key add-
$ Sudo apt-get update
$ apt-cache search postgresql | grep postgresql-client
$ apt-get install postgresql-client-9.5

2
Yogesh Jilhawar

Postgresqlクライアントをアンインストールして問題を解決することができました

Sudo apt-get remove postgresql-client-common

そして、再インストール

  Sudo apt-get install postgresql-client-11
2
ThatDataGuy

いくつかのバージョンのpostgresqlクライアントを同時に使用する必要がある場合

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

古いクラスターと

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

新しい

詳細については、askubuntuで承認済みの回答を確認してください: https://askubuntu.com/a/647341/1044581

1
shooma

tl:dr;古いクラスターをアンインストールする必要はありません。代わりに、以下を~/.postgresqlrcに入れてください

<version> <clustername> <defaultdb>

例:9.6 main *


古いクラスターをアンインストールする必要はありません。次の行がある/usr/share/postgresql-common/pg_wrapperを調べました。

# 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);
}

つまり、psqlのようなコマンドは常に、マシンにインストールされている最新のインストール済みバージョンで実行されますが、pg_dumpのようなコマンドは実行されません。

pg_wrapperの上部にヒントがあります。

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

man postgresqlrcは、~/.postgresqlrcをこのようにフォーマットする必要があることを示しています。

<version> <cluster name> <default database

pg_lsclustersから次の出力が得られました。

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

つまり、私の~/.postgresqlrcは次のようになります。

9.6 main *

pg_dump -Vを実行すると、目的のバージョンが表示されます。

0
deargle