0

所以我不熟悉使用过程和触发器,这让我很困惑,我曾经使用过temporal tables并且想要创建一个插入、更新或删除记录的历史表。

事实上,当我使用这个触发器 sql 时,我已经创建了我的历史表并且工作正常

DROP TRIGGER if exists versioning_trigger on mytable;
CREATE TRIGGER versioning_trigger BEFORE INSERT OR UPDATE OR DELETE ON mytable FOR EACH ROW EXECUTE PROCEDURE versioning('sys_period', 'table_history', true);

这将创建更新或删除行的记录,将旧行记录精确地复制mytabletable_history表中并更新记录。mytable但我想将更新的记录插入mytable到,table_history以便它具有所有类型的记录('当前活动记录'和“更新前记录”)。还可以在table_history执行触发器时插入一些其他字段。

我想问一下

  1. 如何CREATE TRIGGER在 temporal_tables 的一个查询中同时拥有不同的触发事件(BEFORE 或 AFTER)?
  2. table_history是否可以在触发器执行中插入新的字段值?我怎样才能做到这一点?
4

1 回答 1

0

https://www.postgresql.org/docs/current/static/plpgsql-trigger.html

使用 CREATE FUNCTION 命令创建触发器过程,将其声明为不带参数且返回类型为触发器的函数

并且

  1. 同一个触发器不能在事件之前和之后触发 - 如果你真的需要它,只需创建两个触发器

https://www.postgresql.org/docs/current/static/sql-createtrigger.html

确定函数是在事件之前、之后还是代替事件调用。

  1. 使用NEW而不是OLD新值

https://www.postgresql.org/docs/current/static/plpgsql-trigger.html

NEW

数据类型记录;为行级触发器中的 INSERT/UPDATE 操作保存新数据库行的变量。此变量在语句级触发器和 DELETE 操作中未分配。

于 2018-03-07T08:46:39.640 回答