triggers #
视图
triggers 包含当前数据库中定义在当前用户
拥有的、或对其拥有
SELECT 之外的某些特权的表和视图上的全部
触发器。
Table 35.55. \1 字段列说明
Column Type Description |
|---|
包含该触发器的数据库的名称(总是当前数据库) |
包含该触发器的模式的名字 |
该触发器的名称 |
触发该触发器的事件( |
包含该触发器所定义表的数据库的名称 (总是当前数据库) |
包含定义该触发器的表的模式的名字 |
定义该触发器的表的名字 |
同一表上具有相同
|
触发器的
|
该触发器执行的语句(目前总是 |
指示该触发器是对每个被处理的行触发一次,
还是对每条语句触发一次
(
|
触发器触发的时间( |
“旧”过渡表的名字,如果没有则为空 |
“新”过渡表的名字,如果没有则为空 |
适用于 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 及后续版本。