私はもともと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
どうすればアップグレードできますか?更新が必要なパッケージを特定しようとしましたが、それが正しいことであるかどうかは本当にわかりません。
9.3クライアントをインストールしても9.2クライアントは自動的にアンインストールされないことがわかりました。両方がこのようなマシンにある場合は、それが得られます。答えは、postgresql-client-9.2(またはあなたのケースでは適切な古いバージョンであれば何でも)を削除することです。
コマンドの出力を確認することができます
dpkg -l | grep postgres
インストールされているバージョンを確認し、アクティブなpg_dumpは通常、postgresql-client-commonパッケージの一部です。
(そして質問を編集してください、バージョン9.3から9.3にどのようにアップグレードしたのかは明確ではありません...)
私も同じ問題に直面していました。まず、古い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
Postgresqlクライアントをアンインストールして問題を解決することができました
Sudo apt-get remove postgresql-client-common
そして、再インストール
Sudo apt-get install postgresql-client-11
いくつかのバージョンの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
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
を実行すると、目的のバージョンが表示されます。