Postgres触发干扰冲突后更新集'

时间:2016-12-29 10:49:36

标签: sql postgresql triggers primary-key sql-insert

我有一个SQL插件,应该增加version列并更新主键冲突的time列。

insert into items (pk, time, version, name)
        values (9999, now(), 1)
        on conflict (pk) do update set
          time = now(),
          version = items.version + 1,
          name = excluded.name

一切正常,直到我在更新发生时添加触发器来归档行。因此,如果版本为1的行,并且稍后会发生插入,则上述查询会将version列增加为2.但我希望版本1的旧行转到{{1表格。

但是当我在下面添加触发器时,上面的插件并没有像没有这个触发器那样更新版本和时间列。我该如何修复扳机?是因为我正在做archive,还是因为它是return old触发器?

before update

1 个答案:

答案 0 :(得分:2)

是的,适用于return old,返回旧的内容会更改要使用旧值更新的记录值,无论如何,您可以根据需要执行return new;语句,而我将在更新后触发器中执行此操作,逻辑是在列表版本更新后进行归档,而不是在更新之前进行归档