Postgresデータベースのバックアップと復元にpg_dumpとpg_restoreを使用しています。
この質問に関連するドキュメントの情報を次に示します。Pg_restoreの場合、-Cオプションは次のように説明されます
-C
-作成
復元する前にデータベースを作成します。 --cleanも指定されている場合、>>接続する前にターゲットデータベースを削除して再作成します。このオプションを使用すると、-dで指定されたデータベースは、最初のDROP DATABASEコマンドとCREATE DATABASEコマンドを発行するためにのみ使用されます。すべてのデータは、アーカイブに表示されるデータベース名に復元されます。
しかし、pg_restoreでこのオプションを使用しても、次のエラーが発生します
pg_restore:[アーカイバ(db)]データベース "test"への接続に失敗しました:致命的:>データベース "test"は存在しません
説明に従って、-Cオプションは欠落しているデータベースを作成しているはずです。しかし、それは私の場合ではありません。
バックアップと復元のために行った手順は次のとおりです。
pg_dump -N backup -d test --format custom -v -h xxhostxx -p 5432 -U xxuserxx --lock-wait-timeout 300000 -f test_pg_dump.dmp
注:-Cオプションはプレーンテキスト形式でのみ意味があるため、使用しません
testデータベースを削除しました
pg_resoreを使用してデータベースを復元する
pg_restore -C -d test -v -h xxhostxx -p 5432 -U xxuserxx test_pg_dump.dmp**
ここで何が問題なのか理解できません!私は何か悪いことをしていますか?さらに情報が必要な場合はお知らせください。
@Eelkeが言ったとおり-スクリプトを実行しているときにこのデータベースは存在しないため、ファイルに「create database」が書き込まれています...これは、常に「postgres」データベースがあるためです。これを試して:
pg_restore -C -d postgres -v -h xxhostxx -p 5432 -U xxuserxx test_pg_dump.dmp**
そしてこれは:
もちろん、postgresデータベースの所有者を確認してください-ほとんどの場合、これをユーザー 'postgres'として実行する必要があります。
次の引用は、あなたがそれが何を意味すると考えているかを意味するものではありません。彼らが言っていることに気づく前に、私はそれを3回も読まなければなりませんでした。
このオプションを使用すると、-dで指定されたデータベースは、最初のDROP DATABASEコマンドとCREATE DATABASEコマンドを発行するためにのみ使用されます。すべてのデータは、アーカイブに表示されるデータベース名に復元されます。
これは、pg_restoreが最初に-dで指定されたデータベースに接続することを意味します。そのデータベースは作成されません。復元するアーカイブから名前を付けてデータベースを作成し、データをそのデータベースに復元します。
それは私のために機能しなかったので、このコマンドはデータベースを作成します
createdb -h Host -U USER -W DB_NAME
次に、pg復元を実行します
pg_restore -d DB_NAME -v -h Host -p PORT -U USER DUMP_FILE.dump**
物語の終わり