Postgres触发器功能在CONFLICT上更新另一个表

时间:2017-09-07 22:26:40

标签: sql postgresql

将Postgres触发器功能写入INSERT进入"复制" INSERT在" Main"上的表格表。并且在" Main"上进行DELETE操作桌子,我设置' isdeleted' #34;复制"表格为真。但是,在插入冲突中,我希望更新"复制"表和'#de;删除'旗。尝试使用ON CONFLICT(id) DO UPDATE似乎只是更新" Main"表格并没有工作"复制"表。 '请将isDeleted'不属于" Main"表。触发" Main"表格为AFTER INSERTBEFORE DELETE

是否有人知道如何更新另一张冲突表?

BEGIN
  IF (TG_OP = 'INSERT')
  THEN
    INSERT INTO copy_table (id,isdeleted)
      (
        SELECT
          new.id,
          FALSE
      )
    ON CONFLICT (id)  DO NOTHING;
   */ UPDATE copy_table         --TRYING TO MAKE THIS WORK
      SET isdeleted = FALSE
      WHERE new.sfid = sfid; */
    RETURN new;

ELSEIF (TG_OP = 'DELETE')
    THEN
      UPDATE copy_table
      SET
        isdeleted = TRUE
      WHERE old.id= id;
      RETURN old;
  END IF;
END;

1 个答案:

答案 0 :(得分:1)

ON CONFLICT部分中的UPDATE指的是与INSERT相同的表,以及被拒绝的行。因此,您可以使用简单的:

  IF (TG_OP = 'INSERT')
  THEN
    INSERT INTO copy_table (id, isdeleted)
      VALUES (new.id, FALSE)
    ON CONFLICT (id) DO 
      UPDATE SET isdeleted = FALSE;
    RETURN new;
  END IF;