Supported Versions: Current (16) / 15 / 14 / 13 / 12
Development Versions: 17 / devel
Unsupported versions: 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2
This documentation is for an unsupported version of PostgreSQL.
You may want to view the same page for the current version, or one of the other supported versions listed above instead.

52.56. pg_trigger

The catalog pg_trigger stores triggers on tables and views. See CREATE TRIGGER for more information.

Table 52.56. pg_trigger Columns

Name Type References Description
oid oid   Row identifier (hidden attribute; must be explicitly selected)
tgrelid oid pg_class.oid The table this trigger is on
tgname name   Trigger name (must be unique among triggers of same table)
tgfoid oid pg_proc.oid The function to be called
tgtype int2   Bit mask identifying trigger firing conditions
tgenabled char   Controls in which session_replication_role modes the trigger fires. O = trigger fires in origin and local modes, D = trigger is disabled, R = trigger fires in replica mode, A = trigger fires always.
tgisinternal bool   True if trigger is internally generated (usually, to enforce the constraint identified by tgconstraint)
tgconstrrelid oid pg_class.oid The table referenced by a referential integrity constraint
tgconstrindid oid pg_class.oid The index supporting a unique, primary key, referential integrity, or exclusion constraint
tgconstraint oid pg_constraint.oid The pg_constraint entry associated with the trigger, if any
tgdeferrable bool   True if constraint trigger is deferrable
tginitdeferred bool   True if constraint trigger is initially deferred
tgnargs int2   Number of argument strings passed to trigger function
tgattr int2vector pg_attribute.attnum Column numbers, if trigger is column-specific; otherwise an empty array
tgargs bytea   Argument strings to pass to trigger, each NULL-terminated
tgqual pg_node_tree   Expression tree (in nodeToString() representation) for the trigger's WHEN condition, or null if none
tgoldtable name   REFERENCING clause name for OLD TABLE, or null if none
tgnewtable name   REFERENCING clause name for NEW TABLE, or null if none

Currently, column-specific triggering is supported only for UPDATE events, and so tgattr is relevant only for that event type. tgtype might contain bits for other event types as well, but those are presumed to be table-wide regardless of what is in tgattr.


When tgconstraint is nonzero, tgconstrrelid, tgconstrindid, tgdeferrable, and tginitdeferred are largely redundant with the referenced pg_constraint entry. However, it is possible for a non-deferrable trigger to be associated with a deferrable constraint: foreign key constraints can have some deferrable and some non-deferrable triggers.


pg_class.relhastriggers must be true if a relation has any triggers in this catalog.