web-dev-qa-db-ja.com

pg_restoreが--createを無視する理由エラー:失敗:致命的:データベース「new_db」が存在しません

次のコマンドを実行しようとしています:

sshpass  -p "pass" ssh  [email protected] "pg_dump -Fc -U foo some_db" | pg_restore --create --dbname=new_db

私は得ます:

failed: FATAL:  database "new_db" does not exist
19
andilabs

これは、pg_restoreが機能するためです。

pg_restore manual は次のように読み取ります:

-C、--create復元する前にデータベースを作成します。 --cleanも指定されている場合は、接続する前にターゲットデータベースを削除して再作成します。

このオプションを使用すると、-dで指定されたデータベースは、最初のDROP DATABASEコマンドとCREATE DATABASEコマンドを発行するためだけに使用されます。 すべてのデータは、アーカイブに表示されるデータベース名に復元されます。

-dは、-Cが使用されていない場合にのみ、指定されたデータベースに復元します。 -Cを使用すると、データベースは宛先としてではなく、「ランチパッド」として使用されます。

22
SCO

つまり、次のいずれかが必要です(クリーンな既存):(データベース名はpostgresであることに注意してください)

pg_restore -c -d postgres db.dump

または(新規作成)

pg_restore -C -d postgres db.dump

または(明示的に新規作成)

createdatabase the_database
pg_restore -d the_database db.dump

詳細については、SCOの発言を参照してください。

10
lzap

もう少し明確にするために、これは私が問題を解決した私がしたことです:

  1. 希望する名前で空のデータベースを作成します(私の場合、ユーザー名は 'postgres'でした)

    psql -U [username]
    

その後、パスワードの入力を求められます。この時点で、[username]としてログインします。次のように入力します。

    CREATE DATABASE [dbname];

ここでセッションを終了し、通常のターミナルセッションに戻ります。

  1. ターゲットデータベース名を先ほど作成したデータベース名として設定しているファイルからデータベースを復元します。

    cat [your_file_path/filename] | psql -U [username] [dbname]
    

[your_file_path/filename]は、復元するdbファイルまたはテキストファイルの場所です。

0
AntiPawn79