如何在postgresql中禁用检查约束

how to disable check constraint in postgresql

我有以下 table 薪水列的检查约束。我想暂时禁用检查约束。如何禁用和启用检查约束?

CREATE TABLE "Employee_Salary_Details"(
  empno int,
  ename varchar(100),
  sal numeric CONSTRAINT CK_SAL CHECK(sal>3500)
)

INSERT INTO "Employee_Salary_Details" VALUES(101,'RAM',200);

ALTER TABLE "Employee_Salary_Details" DISABLE  CONSTRAINT CK_SAL 

我试过了,但显示错误消息。是否可以禁用和启用 heck 约束?

Is it possible to disable and enable check constraints?

不,那不可能。您需要删除并重新创建它。

使用:

ALTER TABLE Employee_Salary_Details DROP CONSTRAINT CK_SAL;

做你的事,然后加回去:

ALTER TABLE Employee_Salary_Details ADD CONSTRAINT CK_SAL CHECK (sal > 3500);

还有另一种方法..

SELECT consrc,con.*
       FROM pg_catalog.pg_constraint con
            INNER JOIN pg_catalog.pg_class rel
                       ON rel.oid = con.conrelid
            INNER JOIN pg_catalog.pg_namespace nsp
                       ON nsp.oid = connamespace
       WHERE nsp.nspname = 'public' and contype='c'

尝试在此查询结果中找到您的约束条件.. 然后将该条目的“conrelid”更新为 0

这将禁用该约束。

希望这能奏效..

在你的插入工作完成后.. 为'conrelid'

恢复相同的值