我正在使用一个功能
CREATE FUNCTION myfunc() RETURNS trigger AS $$ ... $$ LANGUAGE plpgsql;
带触发器,
CREATE TRIGGER mycheck BEFORE INSERT OR UPDATE ON t
FOR EACH ROW EXECUTE PROCEDURE myfunc();
我现在的问题是在myfunc()
的正文中表达关于事件的条件,像plpgsql一样
IF TRIGGER_EVENT_WAS_INSERT THEN ...doThis... END IF;
如何表达这种情况?(请参阅我已经" INSERT或UPDATE"触发事件)
我正在使用PostgreSQL v9.1。
答案 0 :(得分:9)
是, TG_OP
。 Per documentation:
TG_OP
数据类型文本;一个INSERT
,UPDATE
,DELETE
或TRUNCATE
字符串,告知触发器触发的操作。
在每种情况下,小心你返回。有时你想要RETURN NEW
,DELETE
时没有定义,反之亦然。如果它变得太复杂,而是分成多个触发器,在单独的事件上调用。
示例:
IF TG_OP = 'DELETE' THEN
-- do something
RETURN OLD; -- depends!
ELSIF TG_OP = 'UPDATE' THEN
-- do something
RETURN NEW; -- depends!
END IF;