首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Check constraint仅在Insert而不是updates上触发

Check constraint仅在Insert而不是updates上触发
EN

Stack Overflow用户
提问于 2015-03-24 16:25:25
回答 1查看 374关注 0票数 1

我的Check约束如下:

代码语言:javascript
复制
ALTER TABLE tablename
ADD CONSTRAINT check_duplicate_rows 
CHECK (reject_duplicate_rows(columnB, columnC, columnD) < 2);

我希望仅当您插入记录时才计算约束。

目前它对insert和update语句都是这样做的,问题是我的系统需要更新插入的行,而check约束阻止了更新。

reject_duplicate_rows函数如下:

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION reject_duplicate_rows(columnB integer, columnC integer, columnD integer)
  RETURNS integer AS
$BODY$

DECLARE
    results INTEGER := 1;
    v_count INTEGER := 0;

BEGIN
    IF columnC <> 23 THEN
       RETURN results;
    END IF;

    SELECT total INTO v_count FROM 
        (SELECT  columnB,
                 columnC,
                 columnD,
                 count(*) AS  total 
        FROM     table_name
        WHERE B = columnB AND C = columnC AND D = columnD
        GROUP BY 1, 2, 3)
        as temp_table;

    IF COALESCE(v_count, 0) = 0 THEN
        RETURN results;
    END IF; 

    IF v_count >= 1 THEN
        results := 2;
    END IF;
    RETURN results;
EXCEPTION
  WHEN OTHERS THEN
    RETURN results;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 1000;
ALTER FUNCTION reject_duplicate_rows(integer, integer, integer)
  OWNER TO postgres
EN

回答 1

Stack Overflow用户

发布于 2015-03-24 17:28:59

您是否尝试过创建UPDATE触发器?请参阅Creating postgresql trigger

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29227877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档