Postgres触发干扰“冲突时更新集”

用户名

我有一个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的旧行进入该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()
阿卜杜勒·P。

是的,对于return old,返回old的是将记录值更改为要使用旧值更新的内容,return new;无论如何您都可以针对自己想要的内容进行声明,而我将在更新后触发器中执行此操作,其逻辑是在列表版本更新后存档,而不在更新之前存档

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从触发功能更新Postgres时出现死锁

来自分类Dev

SQLite INSERT的替代方法...冲突时...位置...进行更新集

来自分类Dev

Postgres更新列,发生冲突时忽略此行

来自分类Dev

冲突时更新新价值

来自分类Dev

oracle 在更新时触发

来自分类Dev

更新冲突不做任何事postgres

来自分类Dev

更新冲突不做任何事postgres

来自分类Dev

解决SVN更新时的合并冲突

来自分类Dev

更新VirtualBox时发生冲突

来自分类Dev

插入冲突时回滚触发器

来自分类Dev

在插入/更新时触发不更新tsvector

来自分类Dev

使用WITH CTE对冲突进行POSTGRES插入/更新

来自分类Dev

简单的更新集postgres存储过程

来自分类Dev

冲突时使用插入时的Postgres语法错误

来自分类Dev

属性更新时不会触发$ scope。$ watch

来自分类Dev

多列更新时如何触发

来自分类Dev

触发onPressed时,setState不更新UI

来自分类Dev

属性更新时不会触发$ scope。$ watch

来自分类Dev

在更新MySQL中的特定字段时触发

来自分类Dev

多列更新时如何触发

来自分类Dev

当文本字段更新时触发 APEX

来自分类Dev

更新时如何从模型触发清理方法?

来自分类Dev

更新columnA或ColumnB或ColumnC时触发触发器

来自分类Dev

间接更新View的内容时触发不触发

来自分类Dev

间接更新View的内容时触发不触发

来自分类Dev

触发以避免冲突

来自分类Dev

从插入触发器进行更新时,更新触发器未触发

来自分类Dev

更新ADT插件时存在依赖性冲突

来自分类Dev

更新软件包冲突文件时出错(覆盖无效)