Title: CREATE EVENT TRIGGER Author: The PostgreSQL Global Development Group Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/> Date: 2017 Manual: PostgreSQL 9.6.5 Documentation Source: PostgreSQL 9.6.5 Language: English
NAMECREATE_EVENT_TRIGGER - define a new event trigger
CREATE EVENT TRIGGER name ON event [ WHEN filter_variable IN (filter_value [, ... ]) [ AND ... ] ] EXECUTE PROCEDURE function_name()
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 37, Event Triggers, in the documentation. The user who creates an event trigger becomes its owner.
- The name to give the new trigger. This name must be unique within the database.
- The name of the event that triggers a call to the given function. See Section 37.1, lqOverview of Event Trigger Behaviorrq, in the documentation for more information on event names.
- 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.
- 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').
- A user-supplied function that is declared as taking no argument and returning type event_trigger.
Only superusers can create event triggers.
Event triggers are disabled in single-user mode (see postgres(1)). 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.
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 PROCEDURE abort_any_command();
There is no CREATE EVENT TRIGGER statement in the SQL standard.