最佳答案
我有一个大约有500万行的表,它有一个 fk 约束来引用另一个表的主键(也大约有500万行)。
我需要从两个表中删除大约75000行。我知道,如果我尝试在启用了 fk 约束的情况下执行此操作,那将花费大量的时间,这是不可接受的。
来自 Oracle 背景,我的第一个想法是禁用约束,执行删除,然后重新启用约束。PostGres 似乎可以让我禁用约束触发器,如果我是一个超级用户(我不是,但我登录的用户拥有/创建的对象) ,但这似乎并不完全是我想要的。
另一种选择是删除约束,然后恢复它。考虑到我的表的大小,我担心重新构建约束将花费很长时间。
有什么想法吗?
在 Billy 的鼓励下,我尝试在不改变任何约束的情况下删除,这个过程需要超过10分钟。然而,我发现我试图从中删除的表有一个自引用的外键... 重复(& 非索引)。
最后更新-我删除了自引用的外键,做了删除,并添加回来。比利是对的,但不幸的是,我不能接受他的评论作为答案!