4.6 事件触发器

  1. 称为“Event Trigger”的触发器,这种触发器主要用于弥补PostgreSQL以前版本不支持DDL触发器的不足

  2. 支持下面三种DDL事件

    1. ddl_command_start:DDL开始执行前被触发

    2. ddl_command_end:一个DDL执行完成后被触发

    3. sql_drop:删除数据库对象前被触发。

4.6.1 创建事件触发器

  1. 语法:

    CREATE EVENT TRIGGER name
      ON event
      [ WHEN filter_variable IN (filter_value [, ... ]) [ AND ... ] ]
      EXECUTE PROCEDURE function_name()
  2. 在创建事件触发器之前,必须先创建触发器函数,事件触发器函数的返回值类型为event_trigger,与普通触发器函数的返回类型(trigger)是不一样的

  3. 官方提供禁止所有DDL语法示例:

    CREATE OR REPLACE FUNCTION abort_any_command()
        RETURNS event_trigger
      LANGUAGE plpgsql
        AS $$
    BEGIN
        RAISE EXCEPTION 'command % is disabled', tg_tag;
    END;
    $$;
    
    CREATE EVENT TRIGGER abort_DDL ON DDL_command_start
          EXECUTE PROCEDURE abort_any_command();

    注意:运行上述触发器后,执行任何DDL语法都会报错

  4. 禁止事件触发器

    ALTER EVENT TRIGGER abort_ddl DISABLE;

4.6.2 修改事件触发器

  1. 语法

    ALTER EVENT TRIGGER name DISABLE
    ALTER EVENT TRIGGER name ENABLE [ REPLICA | ALWAYS ]
    ALTER EVENT TRIGGER name OWNER TO new_owner
    ALTER EVENT TRIGGER name RENAME TO new_name

最后更新于