Postgresql 中文操作指南
37.57. triggers #
视图 triggers 包含在当前用户拥有或具有 SELECT 之外的某些权限的表和视图上定义的所有触发器。
Table 37.55. triggers Columns
Column 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 在具有相同 event_manipulation 、 action_timing 和 action_orientation 的同一张表上的触发器之间的触发顺序。在 PostgreSQL 中,触发器按名称顺序触发,因此此列反映了这一点。 |
action_condition character_data WHEN 触发器的条件(如果没有,则为 null,如果表不属于当前启用的角色,则也为 null) |
action_statement character_data 由触发器执行的语句(当前始终为 EXECUTE FUNCTION _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 适用于 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) 而不是 SQL 标准规定的 (trigger_catalog, trigger_schema, trigger_name)。不过,如果您以符合 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 和更高版本。