データベースからダンプファイルのpg_restore.exe
を実行しようとすると、何十ものエラーがスローされます。
ERROR: insert or update on table "someTable" violates foreign key constraint "aConstraintName"
これは明らかに、ダンプファイルからデータベースを復元する前にデータベースを空にしたためです(このファイルは本番データベースからのものです)。もちろん、参照されるテーブルが空の場合、外部キー制約は問題ありません。 ...
pg_restore.exe
を呼び出す前にすべてのテーブルの制約とすべての外部キーを無効にし、その後、制約と外部キーを再度有効にする方法はありますか?.
SO私は何か面白いものを見つけました: 制約チェックをコミット時間まで延期 。しかし、私はpg_restore.exe
をpsql.exe
の内側から呼び出すことができないと思います。
この投稿 もあり、10年前に遡って、制約を削除してから再度追加することを提案しています。または、pg_class reltriggersの値を0に変更すると、制約に対しても可能になります...しかし、私はそれが良い習慣よりもハッキングであると思います...
あなたは何をアドバイスしますか、この場合のベストプラクティスは何ですか? pg_dump.exe
を使用しています-clean
フラグ付きは、データベースの復元時に制約チェックをバイパスするダンプを作成しますか?
--disable-triggers
のpg_restore
オプションを試しましたか?
ドキュメントごと:データの再読み込み中に呼び出したくない参照整合性チェックまたは他のトリガーがテーブルにある場合に使用します。
これは--data-only
の復元にのみ有効であり、--superuser=username
オプションも渡す必要があることに注意してください。