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

时间:2018-03-07 08:38:17

标签: postgresql temporal-database

所以我是使用程序和触发器的新手,这让我很困惑 我使用了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);

这会创建更新或删除的行的记录,将旧行记录从mytable精确复制到table_history表并更新mytable中的记录。但我想插入更新的记录从mytabletable_history,以便它包含所有类型的记录('当前有效记录'以及更新前的记录')。还插入其他一些记录执行触发器时table_history中的字段。

我想问一下

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

1 个答案:

答案 0 :(得分:0)

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

  

使用CREATE FUNCTION命令创建触发器过程,   将它声明为没有参数和返回类型的函数   触发

以及

  1. 相同的触发器无法在事件之前和之后触发 - 只需创建两个触发器(如果您确实需要它)
  2. https://www.postgresql.org/docs/current/static/sql-createtrigger.html

      

    确定是在之前,之后还是之后调用该函数   事件。

    1. 使用NEW代替OLD获取新值
    2. https://www.postgresql.org/docs/current/static/plpgsql-trigger.html

        

      NEW

           

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