Postgresql 中文操作指南
CREATE EVENT TRIGGER
CREATE EVENT TRIGGER — 定义新的事件触发器
CREATE EVENT TRIGGER — define a new event trigger
Synopsis
CREATE EVENT TRIGGER name
ON event
[ WHEN filter_variable IN (filter_value [, ... ]) [ AND ... ] ]
EXECUTE { FUNCTION | PROCEDURE } function_name()
Description
CREATE EVENT TRIGGER 创建新的事件触发器。每当指定事件发生且触发器关联的 WHEN 条件(如果有)得到满足时,将执行触发器函数。有关事件触发器的常规介绍,请参见 Chapter 40 。创建事件触发器用户将成为该触发器的所有者。
CREATE EVENT TRIGGER creates a new event trigger. Whenever the designated event occurs and the WHEN condition associated with the trigger, if any, is satisfied, the trigger function will be executed. For a general introduction to event triggers, see Chapter 40. The user who creates an event trigger becomes its owner.
Parameters
-
name
-
The name to give the new trigger. This name must be unique within the database.
-
-
event
-
The name of the event that triggers a call to the given function. See Section 40.1 for more information on event names.
-
-
filter_variable
-
The name of a variable used to filter events. This makes it possible to restrict the firing of the trigger to a subset of the cases in which it is supported. Currently the only supported filter_variable is TAG.
-
-
filter_value
-
A list of values for the associated filter_variable for which the trigger should fire. For TAG, this means a list of command tags (e.g., 'DROP FUNCTION').
-
-
function_name
-
A user-supplied function that is declared as taking no argument and returning type event_trigger.
-
In the syntax of CREATE EVENT TRIGGER, the keywords FUNCTION and PROCEDURE are equivalent, but the referenced function must in any case be a function, not a procedure. The use of the keyword PROCEDURE here is historical and deprecated.
-
Notes
只有超级用户才能创建事件触发器。
Only superusers can create event triggers.
在单用户模式下,事件触发器处于禁用状态(请参见 postgres )。如果错误的事件触发器导致数据库禁用,以至于您甚至无法删除该触发器,请在单用户模式下重新启动,您将能够进行该操作。
Event triggers are disabled in single-user mode (see postgres). If an erroneous event trigger disables the database so much that you can’t even drop the trigger, restart in single-user mode and you’ll be able to do that.
Examples
禁止执行任何 DDL 命令:
Forbid the execution of any DDL command:
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 FUNCTION abort_any_command();