39.57. triggers #

Представление triggers показывает все триггеры, определённые в текущей базе данных для таблиц и представлений, к которым имеет доступ текущий пользователь (являясь владельцем или имея некоторые права, кроме SELECT).

Таблица 39.55. Столбцы triggers

Тип столбца

Описание

trigger_catalog sql_identifier

Имя базы данных, содержащей триггер (всегда текущая база)

trigger_schema sql_identifier

Имя схемы, содержащей триггер

trigger_name sql_identifier

Имя триггера

event_manipulation character_data

Событие, вызывающие срабатывание триггера (INSERT, UPDATE или DELETE)

event_object_catalog sql_identifier

Имя базы данных, содержащей таблицу, для которой определён триггер (всегда текущая база)

event_object_schema sql_identifier

Имя схемы, содержащей таблицу, для которой определён триггер

event_object_table sql_identifier

Имя таблицы, для которой определён триггер

action_order cardinal_number

Порядок срабатывания триггеров, имеющих одинаковые свойства event_manipulation, action_timing и action_orientation. В Postgres Pro триггеры срабатывают по порядку их имён, что и отражается в этом столбце.

action_condition character_data

Условие WHEN триггера, либо NULL, если его нет (так же NULL, если таблица не принадлежит роли, активной в данный момент)

action_statement character_data

Оператор, выполняемый триггером (в настоящее время всегда EXECUTE FUNCTION функция(...))

action_orientation character_data

Определяет, срабатывает ли триггер для каждой обрабатываемой строки или только для каждого оператора (ROW или STATEMENT)

action_timing character_data

Момент срабатывания триггера (BEFORE (до), AFTER (после) или INSTEAD OF (вместо))

action_reference_old_table sql_identifier

Имя «старой» переходной таблицы либо NULL, если её нет

action_reference_new_table sql_identifier

Имя «новой» переходной таблицы либо NULL, если её нет

action_reference_old_row sql_identifier

Относится к функциональности, отсутствующей в Postgres Pro

action_reference_new_row sql_identifier

Относится к функциональности, отсутствующей в Postgres Pro

created time_stamp

Относится к функциональности, отсутствующей в Postgres Pro


Триггеры в Postgres Pro несовместимы со стандартом в двух аспектах, которые влияют на их представление в информационной схеме. Во-первых, имена триггеров являются локальными для каждой таблицы в Postgres Pro, а не независимыми объектами схемы. Таким образом, в одной схеме могут быть дублирующиеся имена триггеров, если они принадлежат разным таблицам. (Значения trigger_catalog и trigger_schema на самом деле относятся к таблице, для которой определён триггер.) Во-вторых, триггеры в Postgres Pro могут срабатывать при нескольких событиях (например, ON INSERT OR UPDATE), тогда как стандарт SQL допускает только одно событие. Если триггер настроен на несколько событий, он представляется в информационной схеме в виде нескольких строк, по одной для каждого типа события. Вследствие этих двух особенностей, первичный ключ в представлении triggers на самом деле (trigger_catalog, trigger_schema, event_object_table, trigger_name, event_manipulation), а не (trigger_catalog, trigger_schema, trigger_name), как должно быть согласно стандарту SQL. Однако если определять триггеры в строгом соответствии со стандартом SQL (чтобы имена триггеров были уникальны в схеме и каждый триггер связывался только с одним событием), это расхождение никак не проявится.

Примечание

До PostgreSQL 9.1 в этом представлении столбцы action_timing, action_reference_old_table, action_reference_new_table, action_reference_old_row и action_reference_new_row назывались condition_timing, condition_reference_old_table, condition_reference_new_table, condition_reference_old_row и condition_reference_new_row, соответственно. Старые имена были продиктованы стандартом SQL:1999. Новые имена соответствуют стандарту SQL:2003 и более поздним.

39.57. triggers #

The view triggers contains all triggers defined in the current database on tables and views that the current user owns or has some privilege other than SELECT on.

Table 39.55. triggers Columns

Column Type

Description

trigger_catalog sql_identifier

Name of the database that contains the trigger (always the current database)

trigger_schema sql_identifier

Name of the schema that contains the trigger

trigger_name sql_identifier

Name of the trigger

event_manipulation character_data

Event that fires the trigger (INSERT, UPDATE, or DELETE)

event_object_catalog sql_identifier

Name of the database that contains the table that the trigger is defined on (always the current database)

event_object_schema sql_identifier

Name of the schema that contains the table that the trigger is defined on

event_object_table sql_identifier

Name of the table that the trigger is defined on

action_order cardinal_number

Firing order among triggers on the same table having the same event_manipulation, action_timing, and action_orientation. In Postgres Pro, triggers are fired in name order, so this column reflects that.

action_condition character_data

WHEN condition of the trigger, null if none (also null if the table is not owned by a currently enabled role)

action_statement character_data

Statement that is executed by the trigger (currently always EXECUTE FUNCTION function(...))

action_orientation character_data

Identifies whether the trigger fires once for each processed row or once for each statement (ROW or STATEMENT)

action_timing character_data

Time at which the trigger fires (BEFORE, AFTER, or INSTEAD OF)

action_reference_old_table sql_identifier

Name of the old transition table, or null if none

action_reference_new_table sql_identifier

Name of the new transition table, or null if none

action_reference_old_row sql_identifier

Applies to a feature not available in Postgres Pro

action_reference_new_row sql_identifier

Applies to a feature not available in Postgres Pro

created time_stamp

Applies to a feature not available in Postgres Pro


Triggers in Postgres Pro have two incompatibilities with the SQL standard that affect the representation in the information schema. First, trigger names are local to each table in Postgres Pro, rather than being independent schema objects. Therefore there can be duplicate trigger names defined in one schema, so long as they belong to different tables. (trigger_catalog and trigger_schema are really the values pertaining to the table that the trigger is defined on.) Second, triggers can be defined to fire on multiple events in Postgres Pro (e.g., ON INSERT OR UPDATE), whereas the SQL standard only allows one. If a trigger is defined to fire on multiple events, it is represented as multiple rows in the information schema, one for each type of event. As a consequence of these two issues, the primary key of the view triggers is really (trigger_catalog, trigger_schema, event_object_table, trigger_name, event_manipulation) instead of (trigger_catalog, trigger_schema, trigger_name), which is what the SQL standard specifies. Nonetheless, if you define your triggers in a manner that conforms with the SQL standard (trigger names unique in the schema and only one event type per trigger), this will not affect you.

Note

Prior to PostgreSQL 9.1, this view's columns action_timing, action_reference_old_table, action_reference_new_table, action_reference_old_row, and action_reference_new_row were named condition_timing, condition_reference_old_table, condition_reference_new_table, condition_reference_old_row, and condition_reference_new_row respectively. That was how they were named in the SQL:1999 standard. The new naming conforms to SQL:2003 and later.

FAQ