PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 章 34. 信息模式 | 下一页

# 34.54. `triggers`

视图`triggers`包含了所有在当前数据库中的表和视图上定义的， 并且当前用户是其所有者或有除了`SELECT`之外的某些权限的触发器。

表 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 标准的触发器（触发器名字在模式中唯一， 并且每个触发器只有一个事件类型），这些事情不会烦着你。

> 注意: 在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和之后的标准。

上一页 | 起始页 | 下一页
`triggered_update_columns` | 上一级 | `udt_privileges`