Postgresql

在使用 pg_restore.exe 之前禁用約束

  • August 24, 2012

當我嘗試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傳遞該選項。

引用自:https://dba.stackexchange.com/questions/23000