pg_dumpツールを使用してPostgresqlデータベースをダンプしようとしています。
$ pg_dump books > books.out
どのように私はこのエラーを取得しています。
pg_dump: server version: 9.2.1; pg_dump version: 9.1.6
pg_dump: aborting because of server version mismatch
--ignore-version
オプションは非推奨になり、実際には機能していても私の問題の解決策にはなりません。
pg_dumpをアップグレードしてこの問題を解決するにはどうすればよいですか?
PostgreSQL 9.2.1をpg_dump
クライアントマシンにインストールするか、PostgreSQLサーバーマシンからクライアントマシンに$PGHOME
をコピーするだけです。クライアントマシンにinitdb
の新しいクラスターを作成する必要がないことに注意してください。
9.2.1ソフトウェアのインストールが完了したら、.bash_profile
ファイル内のいくつかの環境変数を忘れずに編集してください。
UbuntuでHerokuを使用しているときにこの問題に遭遇しました。修正方法は次のとおりです。
「 Linuxダウンロード(Ubuntu) 」の説明に従って、PostgreSQL aptリポジトリを追加します。 (他のオペレーティングシステムにも同様のページがあります。)
以下を使用して最新バージョン(私にとっては9.3)にアップグレードします。
Sudo apt-get install postgresql
以下を使用して、/usr/bin
にシンボリックリンクを再作成します。
Sudo ln -s /usr/lib/postgresql/9.3/bin/pg_dump /usr/bin/pg_dump --force
上記の/usr/lib/postgresql/...
パスのバージョン番号は、受け取ったエラーのserver version
番号と一致する必要があります。したがって、エラーにpg_dump: server version: 9.9
と表示されている場合は、/usr/lib/postgresql/9.9/...
にリンクしてください。
Pg_dumpのインストール済みバージョンを確認します。
find / -name pg_dump -type f 2>/dev/null
私の出力は:
/usr/pgsql-9.3/bin/pg_dump
/usr/bin/pg_dump
2つのバージョンがインストールされています。 pg_dumpを新しいバージョンで更新するには:
Sudo ln -s /usr/pgsql-9.3/bin/pg_dump /usr/bin/pg_dump --force
これにより、新しいバージョンへのシンボリックリンクが作成されます。
Macには、デフォルトとして使用される組み込みの/usr/bin/pg_dump
コマンドがあります。
Postgresqlをインストールすると、/Library/PostgreSQL/<version>/bin/pg_dump
で別のバイナリを取得できます
pg_dump
を見つけて、コマンドでフルパスを使用できます
locate pg_dump
/usr/bin/pg_dump
/usr/bin/pg_dumpall
/usr/lib/postgresql/9.3/bin/pg_dump
/usr/lib/postgresql/9.3/bin/pg_dumpall
/usr/lib/postgresql/9.6/bin/pg_dump
/usr/lib/postgresql/9.6/bin/pg_dumpall
コマンドで目的のバージョンのパスを使用するだけです
/usr/lib/postgresql/9.6/bin/pg_dump books > books.out
Ubuntuを使用している場合は、postgresql-client
の古いバージョンがインストールされている可能性があります。エラーメッセージのバージョンに基づいて、解決策は次のようになります。
Sudo apt-get remove postgresql-client-9.1
Sudo apt-get install postgresql-client-9.2
PostgreSQLの新しいバージョンをアップグレードまたは再インストールするたびに、pg_dump
の最新バージョンがインストールされます。
システムのどこかに、インストールしたPostgreSQLの最新バージョン(9.2.1が最新)の下にPostgreSQL/bin
ディレクトリがあり、そこからpg_dump
を実行してみてください。
Macユーザーの場合、.profileファイルの先頭に配置します。
export PATH="/Applications/Postgres.app/Contents/MacOS/bin:$PATH"
その後、実行します
. ~/.profile
Homebrewを搭載したMac用。 Herokuからデータベースを取得するときにこの問題が発生しました。実行中に修正しました:
brew upgrade postgresql
Postgres.appを実行している場合:
次のコードを.bash_profile
に追加します。
export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH
ターミナルを再起動します。
説明したように、これはあなたのpostgresqlが古いバージョンにあるためです-> homebrew経由でMacの場合:
brew tap petere/postgresql
、
brew install <formula>
(例:brew install petere/postgresql/postgresql-9.6
)
古いpostgreを削除します。
brew unlink postgresql
brew link -f postgresql-9.6
エラーが発生した場合、各ステップで醸造指示を読んでそれに従うことを忘れないでください。
詳細はこちらをご覧ください: https://github.com/petere/homebrew-postgresql
答えは馬鹿げているように聞こえますが、上記のエラーが発生し、以前のバージョンのpg_dumpを実行したい場合は、postgresのbinディレクトリに移動して、次のように入力します。
./pg_dump servername> out.sql ./はルートを無視し、現在のディレクトリでpg_dumpを探します
Dockerがインストールされている場合、次のようなことができます。
$ docker run postgres:9.2 pg_dump books > books.out
これにより、Postgres 9.2を含むDockerコンテナーがダウンロードされ、コンテナー内でpg_dump
が実行され、出力が書き込まれます。
** postgresバージョンのインストール後は一致します(9.2)シンボリックリンクまたは新しいショートカットを作成します
**-'/ usr/bin'で
syntag is = Sudo ln -s [path for use] [new shortcut name]
例
Sudo ln -s /usr/lib/postgresql/9.2/bin/pg_dump new_pg_dump
-呼び出し方法:new_pg_dump -h 192.168.9.88 -U postgres database
さて、2つのpostgresバージョンがインストールされているのと同じ問題がありました。
適切なpg_dumpを使用するだけで、あなたの場合は何も変更する必要はありません。
$> /usr/lib/postgresql/9.2/bin/pg_dump books > books.out
Macの場合は、find / -name pg_dump -type f 2>/dev/null
を使用してpg_dumpの場所を見つけます
私にとって、次の結果があります。
Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dump
/usr/local/Cellar/postgresql/9.4.5_2/bin/pg_dump
Sudo ln -s new_pg_dump old_pg_dump --force
を使用したくない場合は、次を使用します。
ターミナルでApplications/Postgres.app/Contents/Versions/9.5/bin/pg_dump
に置き換えるpg_dump
例えば:
Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dump books > books.out
わたしにはできる!
HerokuのPostgres.appを使用している場合、pg_dumpは(他のすべてのバイナリとともに)/Applications/Postgres.app/Contents/MacOS/bin/
にあります
その場合、それは
ln -s /Applications/Postgres.app/Contents/MacOS/bin/pg_dump /usr/local/bin/pg_dump
または
ln -s /Applications/Postgres.app/Contents/MacOS/bin/* /usr/local/bin/.
それらをすべてつかむために
他の誰かがカバーしたとは思わない代替答え。
複数のPGクラスターがインストールされている場合(私と同様)、pg_lsclusters
を使用してそれらを表示できます。
表示されたリストからバージョンとクラスターを確認できるはずです。
そこから、これを行うことができます:
pg_dump --cluster=9.6/main books > books.out
明らかに、バージョンとクラスターを/で区切ったpg_lsclusters
によって返されるものから、バージョンとクラスター名を状況に応じた適切なものに置き換えてください。これは、実行対象の特定のクラスターを対象としています。
私は同じエラーを抱えていたので、これが私の場合の解決方法です。これは、postgresqlのバージョンが9.2.1であるにもかかわらず、9.1.6のpostgresqlサービスを開始したことを意味します。
psql postgres
を実行すると、以下が表示されます。
psql (9.2.1, server 9.1.6)
この問題を解決するために私がしたことは:
brew services stop [email protected]
brew services restart [email protected]
ここでpsql postgres
を実行すると、次のようになります:psql (9.2.1)
brew services list
を実行して、postgresのステータスを確認することもできます。
データベースが別のマシンにインストールされている場合、おそらく正しいバージョンのpg_dumpがインストールされています。これは、SSHを使用してpg_dumpコマンドをリモートで実行できることを意味します:ssh username@dbserver pg_dump books > books.out
パスワードなしで実行するために公開キー認証を使用することもできます。それを実現する手順:
それを試してください:
export PATH=/usr/local/bin:$PATH