
コンピュータに 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
、その目的は、正しいインスタンスを選択し、対応するバイナリを実行することです。 は標準の--cluster
PostgreSQL コマンドには存在せず、この複数バージョン/複数パスの問題に対処することを目的とした Debian/Ubuntu の追加機能です。
psql
これは、、、などでも同様ですcreatedb
。createuser
の約 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.dump
postgres 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 を任意のバージョンに変更できます。