Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

F.39. spi — 服务器编程接口特性/示例 #

F.39.1. refint — 用于实现参照完整性的函数
F.39.2. autoinc — 自增字段函数
F.39.3. insert_username — 跟踪表更改者函数
F.39.4. moddatetime — 跟踪最后修改时间函数

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

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

F.39.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 — 将引用键字段设置为 null)、构成主键/唯一键的触发表列名称,然后是引用表名称和列名称(对于通过第一个参数指定的多引用表应重复)。请注意,主键/唯一键列应标记为 NOT NULL,且应有唯一索引。

refint.example 中有示例。

F.39.2. autoinc — 字段自动增量的函数 #

autoinc() 是将序列的下一个值存储到整数字段中的触发器。这与内置的 序列列 功能有一些重叠,但它们不相同:autoinc() 会覆盖在插入期间代替其他字段值的尝试,而且在更新期间也可以选择使用它来递增字段。

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

autoinc.example 中有一个示例。

F.39.3. insert_username — 用来跟踪谁更改了表的函数 #

insert_username() 是将当前用户的名称存储到文本字段中的触发器。这对于跟踪表内某特定行最近的修改者来说很有用。

要使用,请使用此函数创建一个 BEFORE INSERT 和/或 UPDATE 触发器。指定单个触发器参数:要修改的文本列的名称。

insert_username.example 中有一个示例。

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

moddatetime() 是将当前时间存储到 timestamp 字段的触发器。这对于跟踪表内某特定行的最后修改时间很有用。

要使用,请使用此函数创建一个 BEFORE UPDATE 触发器。指定单个触发器参数:要修改的列的名称。该列必须是 timestamp带时区的 timestamp 类型。

moddatetime.example 中有一个示例。