36.55. triggers
视图triggers
包含表中当前数据库中定义的所有触发器,以及当前用户拥有的或除SELECT
on 以外的特权的视图。
表 36.53. triggers
列
Name | Data Type | Description |
---|---|---|
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 | 尚未实现 |
action_condition | character_data | WHEN 触发条件,如果没有则为 null(如果表不属于当前启用的角色,则为 null) |
action_statement | character_data | 触发器执行的语句(当前始终为EXECUTE PROCEDURE function(...) ) |
action_orientation | character_data | 标识触发器是为每个处理的行触发一次还是为每个语句触发一次(ROW 或STATEMENT ) |
action_timing | character_data | 触发器触发的时间(BEFORE ,AFTER 或INSTEAD OF ) |
action_reference_old_table | sql_identifier | 适用于 PostgreSQL 中不可用的功能 |
action_reference_new_table | sql_identifier | 适用于 PostgreSQL 中不可用的功能 |
action_reference_old_row | sql_identifier | 适用于 PostgreSQL 中不可用的功能 |
action_reference_new_row | sql_identifier | 适用于 PostgreSQL 中不可用的功能 |
created | time_stamp | 适用于 PostgreSQL 中不可用的功能 |
PostgreSQL 中的触发器与 SQL 标准有两个不兼容,这会影响信息模式中的表示。首先,触发器名称是 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 标准的方式定义触发器(架构中唯一的触发器名称,每个触发器只有一个事件类型),则这不会影响您。
Note
在 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 及更高版本。