【问题标题】:Can a function detect the trigger event type?函数可以检测触发事件类型吗?
【发布时间】:2014-07-07 18:26:54
【问题描述】:

我在 PostgreSQL 9.1 中使用一个函数:

CREATE FUNCTION myfunc() RETURNS trigger AS $$ ... $$ LANGUAGE plpgsql;

带触发器:

CREATE TRIGGER mycheck
BEFORE INSERT OR UPDATE ON t
FOR EACH ROW EXECUTE PROCEDURE myfunc();

我现在的问题是在该函数的主体中表达有关事件的条件,例如(伪代码):

IF TRIGGER_EVENT_WAS_INSERT THEN ...doThis... END IF;

如何表达这个条件?
(请注意触发器中的BEFORE INSERT OR UPDATE!)

【问题讨论】:

标签: postgresql triggers plpgsql


【解决方案1】:

是的,TG_OPThe manual:

TG_OP
数据类型文本;由INSERTUPDATEDELETETRUNCATE 组成的字符串,说明触发了哪个操作。

小心你在每种情况下返回。有时您想要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;

More code examples in related answers.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 2018-05-13
    • 2014-02-03
    相关资源
    最近更新 更多