36.56. triggers

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

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

ИмяТип данныхОписание
trigger_catalogsql_identifierИмя базы данных, содержащей триггер (всегда текущая база)
trigger_schemasql_identifierИмя схемы, содержащей триггер
trigger_namesql_identifierИмя триггера
event_manipulationcharacter_dataСобытие, вызывающие срабатывание триггера (INSERT, UPDATE или DELETE)
event_object_catalogsql_identifierИмя базы данных, содержащей таблицу, для которой определён триггер (всегда текущая база)
event_object_schemasql_identifierИмя схемы, содержащей таблицу, для которой определён триггер
event_object_tablesql_identifierИмя таблицы, для которой определён триггер
action_ordercardinal_numberПорядок срабатывания триггеров, имеющих одинаковые свойства event_manipulation, action_timing и action_orientation. В PostgreSQL триггеры срабатывают по порядку их имён, что и отражается в этом столбце.
action_conditioncharacter_dataУсловие WHEN триггера, либо NULL, если его нет (так же NULL, если таблица не принадлежит текущей активной роли)
action_statementcharacter_dataОператор, выполняемый триггером (в настоящее время всегда EXECUTE FUNCTION функция(...))
action_orientationcharacter_dataОпределяет, срабатывает ли триггер для каждой обрабатываемой строки или только для каждого оператора (ROW или STATEMENT)
action_timingcharacter_dataМомент срабатывания триггера (BEFORE (до), AFTER (после) или INSTEAD OF (вместо))
action_reference_old_tablesql_identifierИмя «старой» переходной таблицы либо NULL, если её нет
action_reference_new_tablesql_identifierИмя «новой» переходной таблицы либо NULL, если её нет
action_reference_old_rowsql_identifierОтносится к функциональности, отсутствующей в PostgreSQL
action_reference_new_rowsql_identifierОтносится к функциональности, отсутствующей в PostgreSQL
createdtime_stampОтносится к функциональности, отсутствующей в PostgreSQL

Триггеры в PostgreSQL несовместимы со стандартом в двух аспектах, которые влияют на их представление в информационной схеме. Во-первых, имена триггеров являются локальными для каждой таблицы в PostgreSQL, а не независимыми объектами схемы. Таким образом, в одной схеме могут быть дублирующиеся имена триггеров, если они принадлежат разным таблицам. (Значения trigger_catalog и trigger_schema на самом деле относятся к таблице, для которой определён триггер.) Во-вторых, триггеры в PostgreSQL могут срабатывать при нескольких событиях (например, 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 и более поздним.