我是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();