跳到主要内容

Trigger

提示
  • trigger 函数不能定义参数,通过 TG_ARGV 接收参数
varfor
NEW
OLD
TG_NAMEtrigger name
TG_WHENBEFORE/AFTER/INSTEAD OF
TG_LEVELROW/STATEMENT
TG_OPINSERT/UPDATE/DELETE/TRUNCATE
TG_RELIDoid of table
TG_RELNAMEname of table
TG_TABLE_NAMEname of table
TG_TABLE_SCHEMAschema of table
TG_NARGSnumber of arguments
TG_ARGVarguments
TG_EVENT
TG_TAG
  • 返回类型 trigger - 数据变化
  • 返回类型 event_trigger - 数据库事件
  • 自动创建变量 TG_<NAME>
  • 返回 NULL 或 record/row
  • BEFORE row
    • 返回 NULL 则不会触发实际操作 - INSERT/UPDATE/DELETE
    • 修改 NEW 返回会使用新的值
    • DELETE 返回内容无意义,但需要 非 NULL
      • 此时 NEW 为 NULL,一般返回 OLD
  • INSTEAD OF
    • 只能是 row 级别,只支持 view
  • event_trigger - DDL 事件
    • TG_EVENT, TG_TAG
    • ALTER|CREATE|DROP|COMMENT|GRANT|REVOKE|IMPORT FOREIGN SCHEMA|REFRESH MATERIALIZED VIEW
    • SECURITY LABEL, SELECT INTO
  • 参考
create or replace function insert_entity_sid() returns trigger as
$$
begin
if NEW.sid is null then
NEW.sid := next_entity_sid(TG_ARGV[0], NEW.tid);
end if;
return new;
end;
$$ language plpgsql;