↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3
预发布版本文档。 PostgreSQL 19beta4 为测试版本,最终发布内容可能有所不同。

44.5. 触发器函数 #

PL/Python 可以用来定义触发器函数。PostgreSQL 要求:作为触发器调用的函数必须声明为不带参数、返回类型为 trigger 的函数。

当函数被用作触发器时,字典 TD 包含与触发器相关的值:

TD["event"]

以字符串形式包含事件:INSERT、UPDATE、DELETE 或者 TRUNCATE。

TD["when"]

包含 BEFORE、AFTER 或者 INSTEAD OF 之一。

TD["level"]

包含 ROW 或者 STATEMENT。

TD["new"]
TD["old"]

对于行级触发器,这两个字段中的一个或两个会根据触发器事件包含相应的触发行。

TD["name"]

包含触发器名称。

TD["table_name"]

包含触发器所在表的名称。

TD["table_schema"]

包含触发器所在表的模式。

TD["relid"]

包含触发器所在表的 OID。

TD["args"]

如果 CREATE TRIGGER 命令包含参数,这些参数可在 TD["args"][0] 到 TD["args"][n-1] 中取得。

如果 TD["when"] 是 BEFORE 或 INSTEAD OF,且 TD["level"] 是 ROW,那么可以从 Python 函数返回 None 或"OK" 来表示该行未被修改,返回"SKIP" 来中止该事件;如果 TD["event"] 是 INSERT 或 UPDATE,还可以返回"MODIFY" 来表示你已经修改了新行。否则返回值会被忽略。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.