0
我有一個SQL插入,應該增加version
列並更新主鍵衝突time
列。Postgres觸發干擾'衝突做更新集'
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的舊行轉到archive
表。
但是,當我添加下面的觸發器時,上面的插入不會更新版本和時間列,因爲它沒有此觸發器。我如何修復觸發器?是因爲我在做return old
,還是因爲它是before update
觸發器?
CREATE FUNCTION archivefunction() RETURNS trigger
LANGUAGE plpgsql
AS $$
begin
insert into archive (pk, time, version, name)
values (old.pk, old.time, old.version, old.name);
return old;
end
$$
CREATE TRIGGER archivetrigger
BEFORE UPDATE ON items
FOR EACH ROW EXECUTE PROCEDURE archivefunction()