On this page
创建事件触发
CREATE EVENT TRIGGER —创建新的事件触发器
Synopsis
CREATE EVENT TRIGGER name
ON event
[ WHEN filter_variable IN (filter_value [, ... ]) [ AND ... ] ]
EXECUTE PROCEDURE function_name()
Description
CREATE EVENT TRIGGER
创建一个新的事件触发器。每当发生指定事件并且满足与触发器相关的WHEN
条件(如果有)时,将执行触发器功能。有关事件触发器的一般介绍,请参见Chapter 39。创建事件触发器的用户将成为其所有者。
Parameters
name
- 赋予新触发器的名称。该名称在数据库中必须是唯一的。
event
- 触发调用给定函数的事件的名称。有关事件名称的更多信息,请参见Section 39.1。
filter_variable
- 用于过滤事件的变量的名称。这使得可以将触发器的触发限制为支持触发器的情况的子集。当前唯一支持的*
filter_variable
*是TAG
。
- 用于过滤事件的变量的名称。这使得可以将触发器的触发限制为支持触发器的情况的子集。当前唯一支持的*
filter_value
- 触发器应为其触发的关联*
filter_variable
*的值的列表。对于TAG
,这表示命令标签列表(例如'DROP FUNCTION'
)。
- 触发器应为其触发的关联*
function_name
- 用户提供的函数,该函数声明为不带参数且返回类型
event_trigger
。
- 用户提供的函数,该函数声明为不带参数且返回类型
Notes
只有超级用户才能创建事件触发器。
在单用户模式下,事件触发器被禁用(请参阅postgres)。如果错误的事件触发器严重禁用了数据库,以致您甚至无法删除触发器,请以单用户模式重新启动,然后就可以这样做。
Examples
禁止执行任何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();
Compatibility
SQL 标准中没有CREATE EVENT TRIGGER
语句。