函数能否检测到触发事件类型?

Pet*_*uss 2 postgresql triggers plpgsql

我正在使用一个功能

CREATE FUNCTION myfunc() RETURNS trigger AS $$ ... $$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

带触发器,

    CREATE TRIGGER mycheck BEFORE INSERT OR UPDATE ON t
       FOR EACH ROW EXECUTE PROCEDURE myfunc();
Run Code Online (Sandbox Code Playgroud)

我现在的问题是在体内表达myfunc()关于事件的条件,像plpgsql一样

    IF TRIGGER_EVENT_WAS_INSERT THEN ...doThis... END IF;
Run Code Online (Sandbox Code Playgroud)

如何表达这种情况? (看到我有"INSERT OR UPDATE"触发事件)


我正在使用PostgreSQL v9.1.

Erw*_*ter 9

是的,TG_OP.每个文件:

TG_OP
数据类型文本; 的字符串INSERT,UPDATE,DELETE,或TRUNCATE告诉为此操作触发器被解雇了.

小心你在每种情况下返回的内容.有时你想要的RETURN NEW,在a的情况下没有定义,DELETE反之亦然.如果它太复杂,而是分成多个触发器,在单独的事件上调用.

例:

IF TG_OP = 'DELETE' THEN
   -- do something
   RETURN OLD;  -- depends!
ELSIF TG_OP = 'UPDATE' THEN  
   -- do something
   RETURN NEW;  -- depends!
END IF;
Run Code Online (Sandbox Code Playgroud)

相关答案中的更多代码示例.