Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16

37.57. 触发器 #

视图 触发器 包含当前数据库中定义的所有触发器,这些触发器位于当前用户拥有或对其拥有除 SELECT 之外的其他权限的表和视图上。

表 37.55. 触发器

列类型

说明

trigger_catalog sql_identifier

包含触发器的数据库的名称(始终为当前数据库)

trigger_schema sql_identifier

包含触发器的模式的名称

trigger_name sql_identifier

触发器的名称

event_manipulation character_data

触发触发器的事件(INSERTUPDATEDELETE

event_object_catalog sql_identifier

包含定义触发器的表的数据库的名称(始终为当前数据库)

event_object_schema sql_identifier

包含定义触发器的表的模式的名称

event_object_table sql_identifier

定义触发器的表的名称

action_order cardinal_number

在具有相同 event_manipulationaction_timingaction_orientation 的同一张表上的触发器之间的触发顺序。在 PostgreSQL 中,触发器按名称顺序触发,因此此列反映了这一点。

action_condition character_data

触发器的 WHEN 条件,如果没有则为 null(如果表不属于当前启用的角色,则也为 null)

action_statement character_data

由触发器执行的语句(目前始终为 EXECUTE FUNCTION function(...)

action_orientation character_data

标识触发器是针对每行处理一次还是针对每条语句触发一次(ROWSTATEMENT

action_timing character_data

触发器触发的时间(BEFOREAFTERINSTEAD OF

action_reference_old_table sql_identifier

转换表的名称,如果没有,则为 null

action_reference_new_table sql_identifier

转换表的名称,如果没有,则为 null

action_reference_old_row sql_identifier

适用于 PostgreSQL 中不可用的功能

action_reference_new_row sql_identifier

适用于 PostgreSQL 中不可用的功能

created time_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),而不是 SQL 标准指定的 (trigger_catalog, trigger_schema, trigger_name)。尽管如此,如果你以符合 SQL 标准的方式定义触发器(架构中触发器名称唯一,每个触发器只有一个事件类型),这不会影响你。

注意

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 及更高版本。