4.6 事件触发器
称为“Event Trigger”的触发器,这种触发器主要用于弥补PostgreSQL以前版本不支持DDL触发器的不足
支持下面三种DDL事件
ddl_command_start:DDL开始执行前被触发ddl_command_end:一个DDL执行完成后被触发sql_drop:删除数据库对象前被触发。
4.6.1 创建事件触发器
语法:
CREATE EVENT TRIGGER name ON event [ WHEN filter_variable IN (filter_value [, ... ]) [ AND ... ] ] EXECUTE PROCEDURE function_name()在创建事件触发器之前,必须先创建触发器函数,事件触发器函数的返回值类型为
event_trigger,与普通触发器函数的返回类型(trigger)是不一样的官方提供禁止所有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语法都会报错
禁止事件触发器
ALTER EVENT TRIGGER abort_ddl DISABLE;
4.6.2 修改事件触发器
语法
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
最后更新于