triggers
#视图 triggers
包含在当前数据库中定义的所有触发器(在当前用户拥有的表和视图上,或拥有除 SELECT
之外的某些权限的表和视图上)。
表 35.55。triggers
列
列类型 说明 |
---|
包含触发器的数据库的名称(始终为当前数据库) |
包含触发器的模式的名称 |
触发器的名称 |
触发触发器的事件( |
包含已为其定义触发器的表的数据库的名称(始终为当前数据库) |
包含已为其定义触发器的表的模式的名称 |
已为其定义触发器的表的名称 |
具有相同 |
触发器的 |
由触发器执行的语句(当前始终为 |
标识触发器是针对每个已处理的行触发一次还是针对每个语句触发一次( |
触发器触发的时间( |
“旧的” 转换表的名称,或为 null(如果不存在) |
“新的” 转换表的名称,或为 null(如果不存在) |
适用于 PostgreSQL 中不可用的功能 |
适用于 PostgreSQL 中不可用的功能 |
适用于 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 标准的方式定义触发器(在模式中触发器名称唯一,每个触发器仅限一种事件类型),这将不会影响你。
在 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 及更高版本。