版本:
目录导航

F.41. spi

spi模块提供了多个可工作的使用服务器编程接口 (SPI) 和触发器的例子。尽管这些函数本身有一定的价值, 但它们作为修改以满足你自己需求的示例更为有用。这些函数足够通用,可以与任何表一起使用, 但在创建触发器时你必须指定表名和字段名(如下所述)。

下面描述的函数组中的每一个都作为一个独立可安装的扩展提供。

F.41.1. refint — 用于实现参照完整性的函数

check_primary_key()check_foreign_key()用于检查外键约束。 (当然,这个功能早已被内建的外键机制取代,但该模块仍然作为示例有用。)

check_primary_key()检查引用表。用法是使用这个函数在一个引用其他表的表上创建一个BEFORE INSERT OR UPDATE触发器。指定该触发器的参数为:引用表中构成外键的列名、被引用表名称以及在被引用表中构成主键/唯一键的列名。要处理多个外键,请为每一个引用创建一个触发器。

check_foreign_key()检查被引用表。用法是使用这个函数在一个被其他表引用的表上创建一个BEFORE DELETE OR UPDATE触发器。指定该触发器的参数为:该函数必须对其执行检查的引用表数量、找到一个引用键后的动作(cascade — 删除引用行,restrict — 如果引用键存在则中断事务,setnull — 设置引用键域为空)、触发器所在表中构成主键/唯一键的列名、引用表名称和列名称(第一个参数指定多少个引用表就重复多少次)。注意主键/唯一键列应该被标记为 NOT NULL 并且应该有一个唯一索引。

refint.example 中有一些例子。

F.41.2. autoinc — 自增字段的函数

autoinc()是一个将序列的下一个值存储到一个整数域的触发器。这和内建的序数列特性有些重叠,但是它并不完全一样:autoinc()在插入时会覆盖掉给出的不同域值,并且它可被选择用来在更新时增加域。

用法是使用这个函数创建一个 BEFORE INSERT(或者 BEFORE INSERT OR UPDATE)触发器。指定两个触发器参数:要被修改的整数列名和将提供值的序列对象名(事实上,如果你想要更新多于一个自增列,你可以指定任意数量的这种名称对)。

autoinc.example 中有一个例子。

F.41.3. insert_username — 用于跟踪谁修改了一个表的函数

insert_username() 是一个触发器,将当前用户名存储到一个文本字段中。 这有助于跟踪是谁最后在一个表中修改了一个特定行。

用法是使用这个函数创建一个BEFORE INSERT和/或UPDATE触发器。指定一个触发器参数:要被修改的文本列名。

insert_username.example中有一个例子。

F.41.4. moddatetime — 用于跟踪最后修改时间的函数

moddatetime()是一个存储当前时间到一个timestamp字段的触发器。它有助于跟踪一个表中特定行最后一次的修改时间。

用法是使用这个函数创建一个BEFORE UPDATE触发器。指定一个触发器参数:要被修改的列名。该列必须是类型timestamptimestamp with time zone

moddatetime.example中有一个例子。