在 postgres 的临时表中的触发器上插入值

insert values on trigger in temporal tables in postgres

所以我不熟悉使用过程和触发器,这让我很困惑 我已经使用了 temporal tables 并想基本上创建插入、更新或删除记录的历史记录 table。

事实上,我已经创建了我的历史记录 table,并且在我使用此触发器时工作正常 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);

这会创建更新或删除行的记录,精确地将旧行记录从mytable复制到table_historytable并更新mytable中的记录。但是我想将更新的记录从 mytable 插入到 table_history,以便它具有所有类型的记录('当前活动记录'和 'record before updation')。还在 [= 中插入一些其他字段13=]当触发器执行时。

我想问

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

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

A trigger procedure is created with the CREATE FUNCTION command, declaring it as a function with no arguments and a return type of trigger

还有

  1. 同一触发器不能在事件前后都触发 - 如果您确实需要,只需创建两个触发器

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

Determines whether the function is called before, after, or instead of the event.

  1. 使用 NEW 而不是 OLD 作为新值

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

NEW

Data type RECORD; variable holding the new database row for INSERT/UPDATE operations in row-level triggers. This variable is unassigned in statement-level triggers and for DELETE operations.