【发布时间】:2017-05-07 10:25:47
【问题描述】:
我是 postgresql 的新手。我制作了一个在插入表后启用的触发器。我的表有它的值,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();
【问题讨论】:
-
我不知道它是否会有所帮助,这只是快速通知。检查它是否有帮助:
if 't' = any (select ((NEW.start_date, NEW.end_date) overlaps (start_date, end_date)) from "mytable") then -
那个括号看起来有点可疑,但我真的不知道。
-
@Sylogista 我试过不带括号但我得到了相同的结果..
-
向我们展示您在表上的触发器定义(CREATE TRIGGER 代码)
-
@OtoShavadze 好的,我已经添加了。
标签: sql postgresql triggers