CREATE EVENT TRIGGER

    注意事项

    • 只有超级用户或系统管理员才有权限创建事件触发器。
    • 如果为同一事件定义了多个相同类型的事件触发器,则按事件触发器的名称字母顺序触发它们。
    • 事件触发器会对ddl操作的性能有一定影响。取决于事件触发器的数量还执行函数的复杂程度。

    参数说明

    • name

      事件触发器名称。

    • 事件触发器用来做过滤的变量(目前仅支持TAG)。

    • event

    • function_name

      用户定义的函数,必须声明为不带参数并返回类型为event_trigger,在事件触发器触发时执行。

    1. openGauss=# create function test_event_trigger() returns event_trigger as $$
    2. BEGIN
    3. RAISE NOTICE 'test_event_trigger: % %', tg_event, tg_tag;
    4. END
    5. $$ language plpgsql;
    6. --创建事件触发器函数(用于sql_drop事件)
    7. RETURNS event_trigger AS $$
    8. BEGIN
    9. RAISE NOTICE '% - sql_drop', tg_tag;
    10. END;
    11. $$ LANGUAGE plpgsql;
    12. --创建事件触发器函数(用于table_rewrite事件)
    13. openGauss=# CREATE OR REPLACE FUNCTION test_evtrig_no_rewrite() RETURNS event_trigger
    14. BEGIN
    15. RAISE EXCEPTION 'rewrites not allowed';
    16. END;
    17. $$;
    18. --创建事件类型为ddl_command_start的事件触发器
    19. openGauss=# create event trigger regress_event_trigger on ddl_command_start
    20. execute procedure test_event_trigger();
    21. --创建事件类型为ddl_command_end的事件触发器
    22. openGauss=# create event trigger regress_event_trigger_end on ddl_command_end
    23. execute procedure test_event_trigger();
    24. --创建事件类型为sql_drop的事件触发器
    25. openGauss=# CREATE EVENT TRIGGER sql_drop_command ON sql_drop
    26. EXECUTE PROCEDURE drop_sql_command();
    27. --创建事件类型为table_rewrite的事件触发器
    28. openGauss=# create event trigger no_rewrite_allowed on table_rewrite
    29. when tag in ('alter table') execute procedure test_evtrig_no_rewrite();
    30. --修改事件触发器
    31. openGauss=# create role regress_evt_user WITH ENCRYPTED PASSWORD 'EvtUser123';
    32. openGauss=# ALTER EVENT TRIGGER regress_event_trigger RENAME TO regress_event_trigger_start;
    33. --应该失败,事件触发器的owner只能为超级用户
    34. openGauss=# ALTER EVENT TRIGGER regress_event_trigger_start owner to regress_evt_user;
    35. openGauss=# ALTER EVENT TRIGGER regress_event_trigger_start disable;
    36. openGauss=# ALTER EVENT TRIGGER regress_event_trigger_start enable always;
    37. --删除事件触发器
    38. openGauss=# DROP EVENT TRIGGER regress_event_trigger_start;
    39. openGauss=# DROP EVENT TRIGGER regress_event_trigger_end;
    40. openGauss=# DROP EVENT TRIGGER sql_drop_command;

    相关链接