首页 > 解决方案 > 触发动态了解事件类型

问题描述

INSERT对于在or之前发生的触发器,我有几乎相同的代码UPDATE,而不是创建 2 个触发器,有没有办法知道触发器内部动态发生的事件类型?

例子:

CREATE OR REPLACE FUNCTION UpsertClientLog() RETURNS TRIGGER AS $$
DECLARE action_type VARCHAR(255);
BEGIN
  IF (event == 'INSERT') THEN
    action_type = 'Create'
  ELSE 
    action_type = 'Update'
  END IF;

  -- Same code from here on out ..
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER UPSERT_CLIENT_LOG BEFORE INSERT OR UPDATE ON client
  FOR EACH ROW EXECUTE PROCEDURE UpsertClientLog();

标签: sqlpostgresqltriggerssql-updatesql-insert

解决方案


您可以使用特殊变量TO_OP

TG_OP

数据类型文本;一串INSERT, UPDATE, DELETE, 或TRUNCATE告诉触发触发器的操作。


推荐阅读