F.43. spi — 服务器编程接口特性/示例 #
spi 模块提供了若干使用服务器编程接口(SPI)和触发器的实用示例。虽然这些函数本身也有一定的独立用途,但把它们作为可按自身需求修改的示例来看更有价值。这些函数足够通用,可以用于任何表,但在创建触发器时必须指定表名和字段名(如下所述)。
下文描述的每组函数都作为一个可单独安装的扩展提供。
F.43.1. autoinc — 用于字段自动递增的函数 #
autoinc() 是一个将序列的下一个值存入整数字段的触发器。这与内置的“serial 列”功能有一些重叠,但并不相同。只有当该字段的值最初为零或空值时(也就是在插入或更新该行的 SQL 语句动作执行之后),触发器才会替换该字段值。此外,如果序列的下一个值为零,则会再次调用 nextval(),以取得一个非零值。
使用时,创建一个使用该函数的 BEFORE INSERT(或者可选的 BEFORE INSERT OR UPDATE)触发器。指定两个触发器参数:要修改的整型列名,以及提供这些值的序列对象名。(实际上,如果你希望更新多个自动递增列,也可以指定任意多组这样的名称对。)
autoinc.example 中有一个示例。
F.43.2. insert_username — 用于跟踪谁修改了表的函数 #
insert_username() 是一个将当前用户名存入文本字段的触发器。它有助于跟踪表中某一特定行最后一次是由谁修改的。
使用时,创建一个使用该函数的 BEFORE INSERT 和/或
UPDATE 触发器。指定一个触发器参数:要修改的文本列名。
insert_username.example 中有一个示例。
F.43.3. moddatetime — 用于跟踪最后修改时间的函数 #
moddatetime() 是一个将当前时间存入 timestamp 字段的触发器。它有助于跟踪表中某一特定行最后一次被修改的时间。
使用时,创建一个使用该函数的 BEFORE UPDATE 触发器。指定一个触发器参数:要修改的列名。该列必须是
timestamp 或 timestamp with time zone 类型。
moddatetime.example 中有一个示例。