【问题标题】:how to disable check constraint in postgresql如何在 postgresql 中禁用检查约束
【发布时间】:2020-02-12 20:58:17
【问题描述】:

我有下表,其中包含薪金列的检查约束。我想暂时禁用检查约束。如何禁用和启用检查约束?

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 约束?

【问题讨论】:

    标签: postgresql ddl check-constraints


    【解决方案1】:

    是否可以禁用和启用检查约束?

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

    用途:

    ALTER TABLE Employee_Salary_Details DROP CONSTRAINT CK_SAL;
    

    做你的事,然后把它加回来:

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

    【讨论】:

      【解决方案2】:

      还有另一种方法..

      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' 恢复相同的值

      【讨论】:

      • 建议直接操作系统表是一个非常糟糕的建议
      • 是的。但这是解决此问题的方法之一。我只是提供另一种方法。
      猜你喜欢
      • 2011-02-10
      • 1970-01-01
      • 2016-11-13
      • 2017-03-03
      • 2017-03-19
      • 2013-04-25
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      相关资源
      最近更新 更多