On this page
37.55. triggers
视图triggers
包含表中当前数据库中定义的所有触发器,以及当前用户拥有的或除SELECT
on 以外的特权的视图。
表 37.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 |
相同表上具有相同event_manipulation ,action_timing 和action_orientation 的触发器之间的触发 Sequences。在 PostgreSQL 中,触发器按名称 Sequences 触发,因此此列反映了这一点。 |
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)
而不是(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 及更高版本。