# 37.57.触发器
风景触发器
包含当前数据库中在当前用户拥有或具有除选择
在。
表 37.55.触发器
列
列类型 描述 |
---|
触发器目录 sql_identifier 包含触发器的数据库的名称(始终为当前数据库) |
trigger_schema sql_identifier 包含触发器的架构名称 |
触发器名称 sql_identifier 触发器名称 |
event_manipulation 字符数据 触发触发器的事件 ( 插入 ,更新 , 要么删除 ) |
事件对象目录 sql_identifier 包含定义触发器的表的数据库的名称(始终为当前数据库) |
event_object_schema sql_identifier 包含定义触发器的表的模式的名称 |
事件对象表 sql_identifier 定义触发器的表的名称 |
动作顺序 基数 同一张表上的触发器之间的触发顺序相同 event_manipulation ,action_timing , 和动作方向 .在 PostgreSQL 中,触发器按名称顺序触发,因此本列反映了这一点。 |
动作条件 字符数据 什么时候 触发器的条件,如果没有则为 null(如果表不属于当前启用的角色,则为 null) |
action_statement 字符数据 由触发器执行的语句(当前总是 执行功能 * 功能*(...) ) |
动作方向 字符数据 标识触发器是针对每个处理的行触发一次还是针对每个语句触发一次 ( 排 或者陈述 ) |
action_timing 字符数据 触发器触发的时间( 前 , 后 , 或者代替 ) |
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 中不可用的功能 |
创建 时间戳 适用于 PostgreSQL 中不可用的功能 |
PostgreSQL 中的触发器与影响信息模式中表示的 SQL 标准有两个不兼容之处。首先,触发器名称对于 PostgreSQL 中的每个表都是本地的,而不是独立的模式对象。因此,可以在一个模式中定义重复的触发器名称,只要它们属于不同的表。(触发器目录
和trigger_schema
实际上是与定义触发器的表有关的值。)其次,触发器可以定义为在 PostgreSQL 中触发多个事件(例如,插入或更新
),而 SQL 标准只允许一个。如果触发器被定义为触发多个事件,则它在信息模式中表示为多行,每种类型的事件一个。由于这两个问题,视图的主键触发器
是真的(trigger_catalog, trigger_schema, event_object_table, trigger_name, event_manipulation)
代替(触发器目录,触发器架构,触发器名称)
,这是 SQL 标准规定的。尽管如此,如果您以符合 SQL 标准的方式定义触发器(触发器名称在模式中是唯一的,并且每个触发器只有一个事件类型),这不会影响您。
# 笔记
在 PostgreSQL 9.1 之前,此视图的列action_timing
,action_reference_old_table
,action_reference_new_table
,action_reference_old_row
, 和action_reference_new_row
被命名为条件时间
,条件参考旧表
,条件参考新表
,条件参考旧行
, 和条件参考新行
分别。这就是它们在 SQL:1999 标准中的命名方式。新命名符合 SQL:2003 及更高版本。