当我尝试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
传递该选项。