Postgresql将更新更改为插入并创建重复记录

时间:2017-09-02 02:26:04

标签: sql postgresql

我不太确定如何提出这个问题。

该表将其主要数据存储在JSONB列中。其他列是整数主键,唯一文本辅助键,应用程序生成的整数事务ID,以及上次执行的操作类型(插入,更新,删除)。

有5个触发器。

  1. 在插入和更新之前打开,将new.operation列设置为TG_OP(稍后会详细介绍)
  2. 在插入之前,生成用于URL
  3. 的唯一6位字母数字代码
  4. 在插入之前,生成一个独特的随机6位数字代码,避免德国坦克问题。
  5. 在插入之前,将数字和字母数字代码添加到JSONB对象。
  6. 在更新和删除后打开,将附加了新的tranid和operation列的旧记录插入到未编制索引的归档表中。
  7. 所有触发器似乎都有效,并且使用新的ID和JSONB列中的ID创建记录。

    但是,在更新时,新操作将设置为从TG_OP变量更新,但记录将插入到表中,从而创建重复键。由于重复记录,该记录的后续操作失败。

    我已经在pgAdmin调试器中逐步完成了它。它似乎正确地通过每个触发器。它完成了插入的记录(例如tranid = 254,operation = insert)和另一个来自更新的记录(例如tranid = 256,operation = update)。存档表添加了一条记录,显示原始信息为254 / insert,并被256 / update替换。

    但主表中有两条记录!!!

    这违反了应该导致其失败的两个唯一性约束:

    CONSTRAINT npprimarykey_id PRIMARY KEY (id),
    CONSTRAINT npid_txt_unique UNIQUE (id_txt)
    

    除此之外,正在执行的命令是UPDATE

    我不清楚在哪里查看或在哪个论坛上提问。哪些公司建立Postgresql频繁的论坛?

    谢谢,

    大卫

0 个答案:

没有答案