PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

35.57. triggers #

视图 triggers 包含当前数据库中定义在当前用户 拥有的、或对其拥有 SELECT 之外的某些特权的表和视图上的全部 触发器。

Table 35.55. \1 字段列说明

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 条件,没有则为空 (如果该表不归一个当前已启用角色所有,也为 空)

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

“旧”过渡表的名字,如果没有则为空

action_reference_new_table sql_identifier

“新”过渡表的名字,如果没有则为空

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 及后续版本。