[英]Check if a value exists in a return query in postgresql
我是Postgresql的新手。 我做了一个触发器,该触发器在插入表之后启用。 我的表中有1个值,其中start_date为1个日期值,end_date为1个日期。 当我在表格中插入新行时,我想检查是否与任何现有日期重叠。 所以我的触发条件如下:
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();
CREATE TRIGGER check_insert
BEFORE INSERT ON "mytable"
FOR EACH ROW
WHEN (NEW.status = 'current')
EXECUTE PROCEDURE insert_new();
您可以执行AFTER
INSERT检查,删除触发器,然后使用BEFORE
而不是AFTER
进行创建,然后再次尝试插入
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.