web-dev-qa-db-ja.com

Postgresql 9.2 pg_dumpバージョンの不一致

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をアップグレードしてこの問題を解決するにはどうすればよいですか?

123
Chris Colla

PostgreSQL 9.2.1をpg_dumpクライアントマシンにインストールするか、PostgreSQLサーバーマシンからクライアントマシンに$PGHOMEをコピーするだけです。クライアントマシンにinitdbの新しいクラスターを作成する必要がないことに注意してください。

9.2.1ソフトウェアのインストールが完了したら、.bash_profileファイル内のいくつかの環境変数を忘れずに編集してください。

25
francs

UbuntuでHerokuを使用しているときにこの問題に遭遇しました。修正方法は次のとおりです。

  1. Linuxダウンロード(Ubuntu) 」の説明に従って、PostgreSQL aptリポジトリを追加します。 (他のオペレーティングシステムにも同様のページがあります。)

  2. 以下を使用して最新バージョン(私にとっては9.3)にアップグレードします。

    Sudo apt-get install postgresql
    
  3. 以下を使用して、/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/...にリンクしてください。

67
Seth
  1. Pg_dumpのインストール済みバージョンを確認します。

    find / -name pg_dump -type f 2>/dev/null
    
  2. 私の出力は:

    /usr/pgsql-9.3/bin/pg_dump
    /usr/bin/pg_dump
    
  3. 2つのバージョンがインストールされています。 pg_dumpを新しいバージョンで更新するには:

    Sudo ln -s /usr/pgsql-9.3/bin/pg_dump /usr/bin/pg_dump --force
    

これにより、新しいバージョンへのシンボリックリンクが作成されます。

51
Omer Aslam

Macには、デフォルトとして使用される組み込みの/usr/bin/pg_dumpコマンドがあります。

Postgresqlをインストールすると、/Library/PostgreSQL/<version>/bin/pg_dumpで別のバイナリを取得できます

40
user2148301

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
25
Deepak Mahakale

Ubuntuを使用している場合は、postgresql-clientの古いバージョンがインストールされている可能性があります。エラーメッセージのバージョンに基づいて、解決策は次のようになります。

Sudo apt-get remove postgresql-client-9.1
Sudo apt-get install postgresql-client-9.2
15
Abe Voelker

PostgreSQLの新しいバージョンをアップグレードまたは再インストールするたびに、pg_dumpの最新バージョンがインストールされます。

システムのどこかに、インストールしたPostgreSQLの最新バージョン(9.2.1が最新)の下にPostgreSQL/binディレクトリがあり、そこからpg_dumpを実行してみてください。

10
solaimuruganv

Macユーザーの場合、.profileファイルの先頭に配置します。

export PATH="/Applications/Postgres.app/Contents/MacOS/bin:$PATH"

その後、実行します

. ~/.profile
6

Homebrewを搭載したMac用。 Herokuからデータベースを取得するときにこの問題が発生しました。実行中に修正しました:

brew upgrade postgresql
5
hcarreras

Postgres.appを実行している場合:

  1. 次のコードを.bash_profileに追加します。

    export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH
    
  2. ターミナルを再起動します。

4
Andreas

説明したように、これはあなたの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

2
ThangTD

答えは馬鹿げているように聞こえますが、上記のエラーが発生し、以前のバージョンのpg_dumpを実行したい場合は、postgresのbinディレクトリに移動して、次のように入力します。

./pg_dump servername> out.sql ./はルートを無視し、現在のディレクトリでpg_dumpを探します

1
Joe Root

Dockerがインストールされている場合、次のようなことができます。

$ docker run postgres:9.2 pg_dump books > books.out

これにより、Postgres 9.2を含むDockerコンテナーがダウンロードされ、コンテナー内でpg_dumpが実行され、出力が書き込まれます。

1
mzsanford

** 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
1
Petr

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

わたしにはできる!

0
zhaoqing

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/.

それらをすべてつかむために

0
mlebarron

他の誰かがカバーしたとは思わない代替答え。

複数のPGクラスターがインストールされている場合(私と同様)、pg_lsclustersを使用してそれらを表示できます。

表示されたリストからバージョンとクラスターを確認できるはずです。

そこから、これを行うことができます:

pg_dump --cluster=9.6/main books > books.out

明らかに、バージョンとクラスターを/で区切ったpg_lsclustersによって返されるものから、バージョンとクラスター名を状況に応じた適切なものに置き換えてください。これは、実行対象の特定のクラスターを対象としています。

0
ManoDestra

私は同じエラーを抱えていたので、これが私の場合の解決方法です。これは、postgresqlのバージョンが9.2.1であるにもかかわらず、9.1.6のpostgresqlサービスを開始したことを意味します。

psql postgresを実行すると、以下が表示されます。

psql (9.2.1, server 9.1.6)

この問題を解決するために私がしたことは:

  1. brew services stop [email protected]
  2. brew services restart [email protected]

ここでpsql postgresを実行すると、次のようになります:psql (9.2.1)

brew services listを実行して、postgresのステータスを確認することもできます。

0
bright

データベースが別のマシンにインストールされている場合、おそらく正しいバージョンのpg_dumpがインストールされています。これは、SSHを使用してpg_dumpコマンドをリモートで実行できることを意味します:ssh username@dbserver pg_dump books > books.out

パスワードなしで実行するために公開キー認証を使用することもできます。それを実現する手順:

  1. (まだ行われていない場合)ssh-keygenコマンドでキーのペアを生成します。
  2. 通常は〜/ .ssh/authorized_keysの公開キーをデータベースサーバーにコピーします。
  3. 接続がsshコマンドで機能するかどうかをテストします。
0
tomasz

それを試してください:

export PATH=/usr/local/bin:$PATH
0