在我的项目中,我有两个关系:
1.节日(标题,start_date,end_date)
2.事件(标题, event_date )
如果event_date设置在相应节日的start_date和end_date之间,我必须添加一个触发器,在触发新元组或更新到事件关系时检查它。
如果事件行无效,则触发器必须发出通知,否则,必须定期插入\更新元组。
我做的触发器(在pl / pgSQL中):
create function trigf() returns trigger as $$
begin
if((NEW.event_date) < (select start_date from festival where festival.title = NEW.title) or
(NEW.event_date) > (select end_date from festival where festival.title = NEW.title)) then
raise notice 'The new event date is invalid';
end if;
return null;
end;
$$language plpgsql;
create trigger T
before insert or update on event
for each row
execute procedure trigf();
问题是我的函数能够检测到无效日期,但它不会插入\ update有效元组。
为实现这一目标,我需要在触发器中进行哪些更改?
答案 0 :(得分:0)
你需要:
raise 'The new event date is invalid'
代替raise notice 'The
new event date is invalid'
强制在无效日期上输入错误
只是通知,只记录然后被忽略。return NEW
,而不是return NULL
:触发行级触发器BEFORE可以返回null以指示触发器管理器跳过此行的其余操作(即,不触发后续触发器,并且此行不会发生INSERT / UPDATE / DELETE)