両方のPostgreSQLサーバーをインストールする必要がある場合、pg_dumpで「サーバーバージョンの不一致」を解決するにはどうすればよいですか?


13

コンピューターに2つのPostgreSQLサーバーをインストールしました。1つは9.1、もう1つは9.3です。両方のサーバーをインストールする必要があります。

しかし、pg_dumpを実行すると、バージョンの不一致エラーが発生します。

server version: 9.3.6; pg_dump version: 9.1.15
pg_dump: aborting because of server version mismatch

どうすれば解決できますか?(どちらのバージョンもアンインストールできません。最初に9.1をインストールし、何ヶ月か後に9.3をインストールしました。両方のデータベースサーバーをインストールする必要があります)。


9.3バージョンのを明示的に実行しpg_dumpます。両方がインストールされていますが、デフォルトは1つだけです。参照update-alternativesパスのために、またはdpkg -L、それらがどこにあるPostgreSQLのクライアントパッケージを参照してください。自分を表示するために、Ubuntuボックスにすぐにアクセスしないでください。
クレイグリンガー、

できません。pg_dumpコマンドが別のアプリケーションから実行されています。
Luis Masuelli、2015

PATH次に、アプリを実行する環境変数を変更する必要があります。
クレイグリンガー2015

私も同じ問題を抱えていました。PostgreSQLのaptリポジトリ経由でインストールする必要がありました:askubuntu.com/a/831293/448857
neoneye

回答:


16

TL; DR:両方のPostgreSQLインスタンスがUbuntuパッケージによって管理されている場合(必要に応じて)、--clusterオプションを使用してバックアップするPostgreSQLインスタンスを選択すると、対応するバージョンのpg_dumpが自動的に選択されます。

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

または

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

mainは単なるデフォルト値です。実行pg_lsclustersすると、Cluster列に実際の名前が表示されます。

仕組み:Ubuntuパッケージによってインストールされたとおり、/usr/bin/pg_dump実際にはへのソフトリンクであり/usr/share/postgresql-common/pg_wrapper、その目的は正確に正しいインスタンスを選択して対応するバイナリを実行することです。--clusterストックPostgreSQLコマンドには存在しません。これは、この複数のバージョン/複数のパスの問題に対処することを目的としたDebian / Ubuntuの追加です。

これがために同じであるpsqlcreatedbcreateuser18のPostgresのコマンドについて、など/usr/bin実際によって管理されていますpg_wrapper

詳しくはman pg_wrapperをご覧ください。


バージョン/メインは何ですか?主なものは何ですか?
Alexander Mills

1
@AlexanderMills:version= postgresqlのメジャーバージョンとmain=クラスターのデフォルト名。pg_lsclustersおよびpg_wrapperのマンページを参照してください。
DanielVérité19年

7

以下を使用できます。

sudo find / -name pg_dump

pg_dump私の場合にあなたのバージョンを見つけるには:/usr/pgsql-9.6/bin/pg_dump

次はできる:

sudo ln -sfn /usr/pgsql-9.6/bin/pg_dump /usr/bin/pg_dump

必要なものに更新するために

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.