在Postgres 10.6中禁用约束

时间:2019-11-09 16:09:15

标签: sql postgresql

谁能告诉我如何一次性禁用所有表的postgresql约束并在需要时启用它?

例如,我有100个表,我想禁用约束(一次执行),然后执行一些活动并再次启用它们。

1 个答案:

答案 0 :(得分:0)

您没有提及为什么要禁用约束。通常,您定义约束是有原因的。您是否研究过延迟约束?延迟约束可能会解决您的用例。

约束在postgres中作为内部触发器实现,您可以禁用表的所有触发器,在没有约束的情况下运行要运行的语句,然后重新启用约束。

警告:

  • 如果您还有其他触发器,也将被禁用
  • 确保所做的修改没有违反约束

这里是一个例子:

ALTER TABLE table_name DISABLE TRIGGER ALL;
DELETE FROM table_name ....;
ALTER TABLE table_name ENABLE TRIGGER ALL;

这需要对所有表进行。