---
name: "CREATE_EVENT_TRIGGER"
section: "7"
platform: "linux"
package: "postgresql"
version: "18.6-4"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/CREATE_EVENT_TRIGGER"
---

# CREATE\_EVENT\_TRIGGER(7)

define a new event trigger

## NAME

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** 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 38. 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 38.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.

Event triggers are disabled in single-user mode (see [**postgres**(1)](/postgres/1.md)) as well as when event\_triggers is set to false. If an erroneous event trigger disables the database so much that you can't even drop the trigger, restart with event\_triggers set to false to temporarily disable event triggers, or in single-user mode, and you'll be able to do that.

## EXAMPLES

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();
```

## COMPATIBILITY

There is no **CREATE EVENT TRIGGER** statement in the SQL standard.

## SEE ALSO

ALTER EVENT TRIGGER ([**ALTER\_EVENT\_TRIGGER**(7)](/ALTER_EVENT_TRIGGER/7.md)), DROP EVENT TRIGGER ([**DROP\_EVENT\_TRIGGER**(7)](/DROP_EVENT_TRIGGER/7.md)), CREATE FUNCTION ([**CREATE\_FUNCTION**(7)](/CREATE_FUNCTION/7.md))
