web-dev-qa-db-ja.com

pg_restore.exeを使用する前に制約を無効にする

データベースからダンプファイルのpg_restore.exeを実行しようとすると、何十ものエラーがスローされます。

ERROR: insert or update on table "someTable" violates foreign key constraint "aConstraintName"

これは明らかに、ダンプファイルからデータベースを復元する前にデータベースを空にしたためです(このファイルは本番データベースからのものです)。もちろん、参照されるテーブルが空の場合、外部キー制約は問題ありません。 ...

pg_restore.exeを呼び出す前にすべてのテーブルの制約とすべての外部キーを無効にし、その後、制約と外部キーを再度有効にする方法はありますか?.

SO私は何か面白いものを見つけました: 制約チェックをコミット時間まで延期 。しかし、私はpg_restore.exepsql.exeの内側から呼び出すことができないと思います。

この投稿 もあり、10年前に遡って、制約を削除してから再度追加することを提案しています。または、pg_class reltriggersの値を0に変更すると、制約に対しても可能になります...しかし、私はそれが良い習慣よりもハッキングであると思います...

あなたは何をアドバイスしますか、この場合のベストプラクティスは何ですか? pg_dump.exeを使用しています-cleanフラグ付きは、データベースの復元時に制約チェックをバイパスするダンプを作成しますか?

16

--disable-triggerspg_restoreオプションを試しましたか?

ドキュメントごと:データの再読み込み中に呼び出したくない参照整合性チェックまたは他のトリガーがテーブルにある場合に使用します。

これは--data-onlyの復元にのみ有効であり、--superuser=usernameオプションも渡す必要があることに注意してください。

28
Matthew Wood