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

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

コンピュータに 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をインストールしました -両方データベース サーバーがインストールされている場合)。

答え1

要約: 両方の 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、その目的は、正しいインスタンスを選択し、対応するバイナリを実行することです。 は標準の--clusterPostgreSQL コマンドには存在せず、この複数バージョン/複数パスの問題に対処することを目的とした Debian/Ubuntu の追加機能です。

psqlこれは、、、などでも同様ですcreatedbcreateuserの約 18 個の postgres コマンドは、/usr/bin実際には によって管理されていますpg_wrapper

見るマニュアルpg_wrapper多くのための。

答え2

以下を使用できます:

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

必要なものにアップデートするために

答え3

docker を実行している場合は、複数のインストールを管理することなく、任意のバージョンの pg_dump を実行できます。これにより、/path/to/dump/to/myfilename.dumppostgres 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コマンドが完了したらコンテナを削除します
  • --network=hostコンテナをホストのローカルネットワークに接続します
  • -v ...ホストディレクトリ(/path/to/dump/to)をコンテナ内の一時ディレクトリにマウントします

/tmp/dumpマウントするディレクトリ ( ) が、pg_dump が書き込むディレクトリと同じであることを確認するだけです。

その後、12.5 を任意のバージョンに変更できます。

関連情報