==================== CREATE EVENT TRIGGER ==================== .. container:: refentry :name: SQL-CREATEEVENTTRIGGER .. container:: titlepage .. container:: refnamediv .. rubric:: CREATE EVENT TRIGGER :name: create-event-trigger CREATE EVENT TRIGGER — 定义一个新的事件触发器 .. container:: refsynopsisdiv .. rubric:: 大纲 :name: 大纲 .. code:: synopsis CREATE EVENT TRIGGER name ON event [ WHEN filter_variable IN (filter_value [, ... ]) [ AND ... ] ] EXECUTE { FUNCTION | PROCEDURE } function_name() .. container:: refsect1 :name: id-1.9.3.63.5 .. rubric:: 描述 :name: 描述 ``CREATE EVENT TRIGGER``\ 创建一个新的事件触发器。 只要指定的事件发生并且与该触发器相关的\ ``WHEN``\ 条件(如果有)被 满足,该触发器的函数将被执行。关于事件触发器的一般性介绍可见。创建事件触发器的用户会成为它的拥有者。 .. container:: refsect1 :name: id-1.9.3.63.6 .. rubric:: 参数 :name: 参数 .. container:: variablelist *``name``* 给新触发器的名称。在该数据库中这个名称必须唯一。 *``event``* 会触发对给定函数调用的事件名称。 *``filter_variable``* 用来过滤事件的变量名称。这可以用来限制触发器只为它支持的那一部分 情况引发。当前唯一支持的 *``filter_variable``* 是\ ``TAG``\ 。 *``filter_value``* 与该触发器要为其引发的 *``filter_variable``*\ 相关联 的一个值列表。对于\ ``TAG``\ ,这表示一个命令标签列表(例如 ``'DROP FUNCTION'``\ )。 *``function_name``* 一个用户提供的函数,它被声明为没有参数并且返回类型 ``event_trigger``\ 。 在\ ``CREATE EVENT TRIGGER``\ 的语法中,关键字\ ``CREATE EVENT TRIGGER``\ 和\ ``PROCEDURE``\ 是等效的,但是被引用的函数在任何情况下都必须是函数,而不是过程。 此处关键字\ ``PROCEDURE``\ 的使用是历史性的,已弃用。 .. container:: refsect1 :name: SQL-CREATEEVENTTRIGGER-NOTES .. rubric:: 注解 :name: 注解 只有超级用户能创建事件触发器。 在单用户模式(见\ `postgres `__\ )中事件触发器被禁用。 如果一个错误的事件触发器禁用了数据库让你甚至无法删除它,可以重启到 单用户模式,这样你就能删除它。 .. container:: refsect1 :name: SQL-CREATEEVENTTRIGGER-EXAMPLES .. rubric:: 示例 :name: 示例 禁止执行任何\ `DDL `__\ 命令: .. code:: programlisting 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(); .. container:: refsect1 :name: SQL-CREATEEVENTTRIGGER-COMPATIBILITY .. rubric:: 兼容性 :name: 兼容性 在 SQL 标准中没有 ``CREATE EVENT TRIGGER``\ 语句。 .. container:: refsect1 :name: id-1.9.3.63.10 .. rubric:: 另见 :name: 另见 `ALTER EVENT TRIGGER `__, `DROP EVENT TRIGGER `__, `CREATE FUNCTION `__