回答

收藏

PostgreSQL - 禁用约束

技术问答 技术问答 248 人阅读 | 0 人回复 | 2023-09-12

我有一个表,大约有500 万行,它有一个主键引用另一个表 fk 约束(约500 万行)。
' Z4 Q3 _* c8 i5 w- J; y/ K5 f) y我需要从两个表中删除大约7.5万 线。我知道,如果我试图使用 fk 在限制下执行此操作将需要不可接受的时间。
6 C; k' K" v$ e来自 Oracle 背景,我的第一个想法是禁止约束,删除它,然后重新启用约束。如果我是超级用户(我不是,但我登录用户身份),PostGres 似乎禁用约束触发器,但这似乎不是我想要的。$ c7 ~6 A2 m* O. r" B) \6 w
另一种选择是删除约束,然后恢复约束。考虑到我手表的大小,我担心重建约束需要很长时间。& U# Q" u3 W; e1 N" ^( @+ m) K$ o
有什么想法吗?
# Y8 T# W- V8 x7 m* `4 F& c2 z- d编辑:在比利的鼓励下,我试图在不改变任何约束的情况下删除它,这需要10多分钟。然而,我发现我试图删除的表中有一个自引用外键......重复(& 非索引)。* d+ c/ j# r3 T& k% q' [
最终更新 - 我删除了自引用外键,删除并重新添加。比利是完全正确的,但不幸的是,我不能接受他的评论作为答案!" ~+ q) @( D4 P5 t- W# R
                                                                  i8 T2 N6 y1 O3 b1 r" W% e# s
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则