36.55. triggers

视图triggers包含表中当前数据库中定义的所有触发器,以及当前用户拥有的或除SELECT on 以外的特权的视图。

表 36.53. triggers

NameData TypeDescription
trigger_catalogsql_identifier包含触发器的数据库的名称(总是当前数据库)
trigger_schemasql_identifier包含触发器的模式的名称
trigger_namesql_identifier触发器名称
event_manipulationcharacter_data触发触发器的事件(INSERTUPDATEDELETE)
event_object_catalogsql_identifier包含定义了触发器的表的数据库的名称(总是当前数据库)
event_object_schemasql_identifier包含定义触发器的表的模式的名称
event_object_tablesql_identifier定义触发器的表的名称
action_ordercardinal_number尚未实现
action_conditioncharacter_dataWHEN触发条件,如果没有则为 null(如果表不属于当前启用的角色,则为 null)
action_statementcharacter_data触发器执行的语句(当前始终为EXECUTE PROCEDURE function(...))
action_orientationcharacter_data标识触发器是为每个处理的行触发一次还是为每个语句触发一次(ROWSTATEMENT)
action_timingcharacter_data触发器触发的时间(BEFOREAFTERINSTEAD OF)
action_reference_old_tablesql_identifier适用于 PostgreSQL 中不可用的功能
action_reference_new_tablesql_identifier适用于 PostgreSQL 中不可用的功能
action_reference_old_rowsql_identifier适用于 PostgreSQL 中不可用的功能
action_reference_new_rowsql_identifier适用于 PostgreSQL 中不可用的功能
createdtime_stamp适用于 PostgreSQL 中不可用的功能

PostgreSQL 中的触发器与 SQL 标准有两个不兼容,这会影响信息模式中的表示。首先,触发器名称是 PostgreSQL 中每个表的本地名称,而不是独立的架构对象。因此,在一个模式中可以定义重复的触发器名称,只要它们属于不同的表即可。 (trigger_catalogtrigger_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 标准的方式定义触发器(架构中唯一的触发器名称,每个触发器只有一个事件类型),则这不会影响您。

Note

在 PostgreSQL 9.1 之前,此视图的列action_timingaction_reference_old_tableaction_reference_new_tableaction_reference_old_rowaction_reference_new_row分别命名为condition_timingcondition_reference_old_tablecondition_reference_new_tablecondition_reference_old_rowcondition_reference_new_row。这就是它们在 SQL:1999 标准中的命名方式。新命名符合 SQL:2003 及更高版本。