次のコマンドを実行しようとしています:
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
これは、pg_restoreが機能するためです。
pg_restore manual は次のように読み取ります:
-C、--create復元する前にデータベースを作成します。 --cleanも指定されている場合は、接続する前にターゲットデータベースを削除して再作成します。
このオプションを使用すると、-dで指定されたデータベースは、最初のDROP DATABASEコマンドとCREATE DATABASEコマンドを発行するためだけに使用されます。 すべてのデータは、アーカイブに表示されるデータベース名に復元されます。
-dは、-Cが使用されていない場合にのみ、指定されたデータベースに復元します。 -Cを使用すると、データベースは宛先としてではなく、「ランチパッド」として使用されます。
つまり、次のいずれかが必要です(クリーンな既存):(データベース名は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の発言を参照してください。
もう少し明確にするために、これは私が問題を解決した私がしたことです:
希望する名前で空のデータベースを作成します(私の場合、ユーザー名は 'postgres'でした)
psql -U [username]
その後、パスワードの入力を求められます。この時点で、[username]としてログインします。次のように入力します。
CREATE DATABASE [dbname];
ここでセッションを終了し、通常のターミナルセッションに戻ります。
ターゲットデータベース名を先ほど作成したデータベース名として設定しているファイルからデータベースを復元します。
cat [your_file_path/filename] | psql -U [username] [dbname]
[your_file_path/filename]は、復元するdbファイルまたはテキストファイルの場所です。