触发器函数必须作为一个没有参数并且返回 opaque 的函数在创建触发器之前创建.
创建触发器的语法如下:
CREATE TRIGGER trigger [ BEFORE | AFTER ] [ INSERT | DELETE | UPDATE [ OR ... ] ] ON relation FOR EACH [ ROW | STATEMENT ] EXECUTE PROCEDURE procedure (args);这里的参数是:
同样,函数可以被用于触发不同的关系(这些函数被命名为"通用触发器函数")。
做为使用上面两个特性的例子,可以有一个通用函数把两个字段名称作为参数:把当前用户作为一个参数而把当前时标做为另一个参数.这样就允许我们在 INSERT 事件上写一个触发器来自动跟踪一个事务表里的记录的创建.如果用于一个 UPDATE 事件,同样我们可以当 "最后更新"(last updated)函数来用.
返回一个指向另一个记录的指针(只用于 INSERT 和 UPDATE ),该指针所指记录将代替原始记录被插入(或者作为在 UPDATE 中记录的新版本).
如果一个触发器函数执行 SQL-查询(使用 SPI)那么这些查询可能再次触发触发器.这就是所谓的嵌套触发器.对嵌套触发器的嵌套深度没有显式的限制.
如果一个触发器是被 INSERT 触发并且插入一个新行到同一关系中,然后该触发器将被再次触发.目前对这种情况没有提供任何同步(等)的措施,这一点也可能会修改.目前,回归测试里有一个函数 funny_dup17() 使用了一些技巧避免对自身的递归(嵌套)调用...