首页 > 解决方案 > 在 postgres 10.6 中禁用约束

问题描述

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

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

标签: sqlpostgresql

解决方案


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

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

警告:

  • 如果您有其他触发器,它们也将被禁用
  • 确保修改不违反约束

这是一个例子:

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

这需要对所有表进行。


推荐阅读