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

时间:2014-05-19 17:30:59

标签: postgresql triggers plpgsql

我正在使用一个功能

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。

1 个答案:

答案 0 :(得分:9)

是, TG_OP Per documentation:

  

TG_OP
  数据类型文本;一个INSERTUPDATEDELETETRUNCATE字符串,告知触发器触发的操作。

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

示例:

IF TG_OP = 'DELETE' THEN
   -- do something
   RETURN OLD;  -- depends!
ELSIF TG_OP = 'UPDATE' THEN  
   -- do something
   RETURN NEW;  -- depends!
END IF;

More code examples in related answers.