我有一张表大约有500万行,其中有一个外键约束引用了另一张表的主键(也有大约500万行)。
我需要从这两个表中删除大约75000行。我知道如果启用外键约束来执行这个操作,将会花费无法接受的时间。
来自Oracle背景的我第一个想到的是禁用约束、删除、然后重新启用约束。PostGres似乎允许我在超级用户身份下禁用约束触发器(我不是,但我作为拥有/创建对象的用户登录),但那似乎不是我想要的。
另一个选择是删除该约束,然后重新添加它。我担心由于我的表格大小重建约束将需要很长时间。
有什么想法吗?
编辑:在Billy的鼓励下,我尝试进行删除而不更改任何约束,并且它超过了10分钟。但是,我发现我要删除的表具有自引用外键...重复(且非索引化)。
最后更新- 我删除了自引用外键,执行了删除操作,然后重新添加了它。Billy的解答都是对的,但不幸的是我不能将他的评论作为答案!