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


16

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使用する、データベースを復元するときに制約チェックをバイパスするダンプが作成されますか?


:誰もがこの後に見つかった場合には、ここではクロスポストstackoverflow.com/questions/12093654/...
クレイグリンガー

回答:


28

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

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

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


そして、それは...魔法のように動作します
ステファン・ロラン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.