当我尝试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重新触发的值更改为0,这对于约束也可能是可行的...但是,恐怕它比好的实践更容易被黑客入侵...
您有什么建议,这种情况下的最佳做法是什么?是否pg_dump.exe
与该-clean
标志一起使用会创建一个转储,从而在还原数据库时绕过约束检查?
这里交叉贴,万一有人认为这后面:stackoverflow.com/questions/12093654/...
—
克雷格林格