多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 47.45\. `pg_trigger` `pg_trigger`存储表和视图上面的触发器。 参阅[CREATE TRIGGER](#calibre_link-459)获取更多信息。 **Table 47-45\. `pg_trigger` 字段** | 名字 | 类型 | 引用 | 描述 | | --- | --- | --- | --- | | `oid` | `oid` | 行标识符(隐藏属性;必须明确选择) | | `tgrelid` | `oid` | `pg_class`.oid | 这个触发器所在的表 | | `tgname` | `name` | 触发器名称(在同一表的所有触发器中必须唯一) | | `tgfoid` | `oid` | `pg_proc`.oid | 要调用的函数 | | `tgtype` | `int2` | 标识触发器条件的位掩码 | | `tgenabled` | `char` | 在[session_replication_role](#calibre_link-526)模块里控制触发器的触发。 `O` = 触发器在"origin"和"local"模块里触发, `D` = 禁用触发器, `R` = 触发器在"replica"模块里触发, `A` = 触发器总是触发。 | | `tgisinternal` | `bool` | 如果触发器是内部产生的则为真(通常,强制约束由 `tgconstraint`指定) | | `tgconstrrelid` | `oid` | `pg_class`.oid | 一个参照完整性约束引用的表 | | `tgconstrindid` | `oid` | `pg_class`.oid | 索引支持唯一、主键或参照完整性约束 | | `tgconstraint` | `oid` | `pg_constraint`.oid | `pg_constraint`条目与触发器相关,如果有 | | `tgdeferrable` | `bool` | 如果约束触发器可推迟则为真 | | `tginitdeferred` | `bool` | 如果约束触发器是初始可推迟则为真 | | `tgnargs` | `int2` | 传递给触发器函数的参数字符串个数 | | `tgattr` | `int2vector` | `pg_attribute`.attnum | 如果触发器是指定字段的则为字段号;否则为空数组 | | `tgargs` | `bytea` | 传递给触发器的参数字符串,每个都是用 NULL 结尾 | | `tgqual` | `pg_node_tree` | 触发器的`WHEN`条件的表达式树(用`nodeToString()`表示), 如果没有则为空 | 当前,指定字段的触发只支持`UPDATE`事件,因此`tgattr`只和事件类型相关。 `tgtype`可能包含一些其他事件类型, 但是假定那些是在表范围的,不管`tgattr`里有什么。 > **Note:** 当`tgconstraint`非零时,`tgconstrrelid`, `tgconstrindid`, `tgdeferrable`, 和 `tginitdeferred`与引用的`pg_constraint` 条目在很大程度上是冗余的。然而,不可延缓的触发器与可延缓的约束关联是可能的: 外键约束可以有一些可延缓和不可延缓的触发器。 > **Note:** 如果一个关系有任何触发器在这个表里,则`pg_class.relhastriggers`必须为真。