检查postgresql中的返回查询中是否存在值

时间:2017-05-07 10:25:48

标签: sql postgresql triggers

我是postgresql的新手。我已经创建了一个在表中插入后启用的触发器。我的表中包含其值,1个start_date的日期值和1个end_date的日期值。当我在表中插入一个新行时,我想检查是否与任何现有日期重叠。所以我的触发器如下:

CREATE OR REPLACE FUNCTION insert_new() 
RETURNS TRIGGER AS $$ 
BEGIN
    if ( 't' = any (select ((NEW.start_date, NEW.end_date) overlaps (start_date, end_date)) from "mytable") ) then 
        RAISE EXCEPTION 'Invalid insertion!';
    else 
        return NEW;
    end if;
END;
$$ LANGUAGE plpgsql; 

对我来说似乎是对的,但是当我尝试在我的表中插入一个新行时,我每次都会得到异常。我无法理解为什么会这样......有什么想法吗?提前谢谢..

这是创建触发器代码:

CREATE TRIGGER check_insert 
AFTER INSERT ON "mytable"
FOR EACH ROW 
WHEN (NEW.status = 'current')
EXECUTE PROCEDURE insert_new();

0 个答案:

没有答案