34.54. triggers
视图triggers
包含了所有在当前数据库中的表和视图上定义的, 并且当前用户是其所有者或有除了SELECT
之外的某些权限的触发器。
Table 34-52. triggers
字段
名字 | 数据类型 | 描述 |
---|---|---|
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 触发器条件,如果没有则为空 (如果当前角色不是该表的所有者也为空) |
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和之后的标准。