ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# CREATE EVENT TRIGGER ## Name CREATE EVENT TRIGGER -- 定义一个事件触发器 ## Synopsis ``` CREATE EVENT TRIGGER _name_ ON _event_ [ WHEN _filter_variable_ IN (filter_value [, ... ]) [ AND ... ] ] EXECUTE PROCEDURE _function_name_() ``` ## 描述 `CREATE EVENT TRIGGER`创建一个新的事件触发器.无论何时指定的事件发生或`WHEN`的条件满足触发器,触发器函数将被执行.对于事件触发器的一般说明,请见于[Chapter 37](#calibre_link-580). 创建事件触发器的用户将变为它的拥有者. ## 参数 `_name_` 一个新的触发器的名字.这个名字必须在数据库内是唯一的. `_event_` 触发调用一个给定函数的事件名子.关于事件名字的更多信息见于 [Section 37.1](#calibre_link-845). `_filter_variable_` 过滤事件的变量名称.这将限制它所支持的事件的一个子集去触发该触发器.现在仅支持`_filter_variable_`值为TAG. `_filter_value_` 可以触发该触发器的 `_filter_variable_`相关的值.对于`TAG`,这意味着一个tags的命令列表.(例如.`'DROP FUNCTION'`). `_function_name_` 一个用户声明的不带参数的函数并且返回 `event_trigger`类型. ## Notes 只有超户能创建事件触发器. 在单用户模式下事件触发器是被关闭的(详见于[postgres](#calibre_link-1033)). 如果一个错误的事件触发器关闭了数据库,在单用户模式下你将不能重启数据库,删除事件触发器. ## Examples 禁止执行任何[DDL](#calibre_link-1570)命令: ``` 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(); ``` ## Compatibility 在标准的SQL语法中没有 `CREATE EVENT TRIGGER`语句. ## 相关内容 [ALTER EVENT TRIGGER](#calibre_link-60), [DROP EVENT TRIGGER](#calibre_link-571), [CREATE FUNCTION](#calibre_link-4)