假设我在桌子上有约束。当我尝试在其中插入没有正确数据的内容时,在控制台中收到一条错误消息,指出该行以及该IC被违反。
ERROR: null value in column "column" violates not-null constraint
DETAIL: Failing row contains (0, null, null, null, null).
现在,如果我添加一个:
CREATE OR REPLACE FUNCTION trigger_function()
RETURNS trigger AS $BODY$
BEGIN
raise notice 'test';
return null;
END;
$BODY$ LANGUAGE plpgsql;
create trigger test_trigger
before update or insert
on tablename
for each row
execute procedure trigger_function();
执行与我之前得到的相同的事情:
NOTICE: test
INSERT 0 0
我知道此触发器并不是真正有用,但我仍在学习它们的工作原理。
是否可以保留以前的错误消息,并在其后添加我在trigger_function中所做的一切?为什么它会替换所有默认消息?
答案 0 :(得分:1)
在触发行级触发器之前,可以返回空,以通知触发器管理器跳过该行的其余操作(即,不触发后续触发器,并且此行不会发生INSERT / UPDATE / DELETE)
(重点是我的)
因为触发器返回NULL
,所以insert
从未真正完成,因此没有违反约束的情况。
The output在psql控制台
INSERT 0 0
告诉您没有插入行。第二个值是插入的行数。
如果您想要“什么都不做”的触发器,则需要使用return new
CREATE OR REPLACE FUNCTION trigger_function()
RETURNS trigger
AS $BODY$
BEGIN
raise notice 'test';
return new; --<< here
END;
$BODY$ LANGUAGE plpgsql;