Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Postgres触发冲突的函数更新另一个表_Sql_Postgresql - Fatal编程技术网

Sql Postgres触发冲突的函数更新另一个表

Sql Postgres触发冲突的函数更新另一个表,sql,postgresql,Sql,Postgresql,在“主”表中插入INSERT后,将Postgres触发器函数写入INSERT到“Copy”表中。在“Main”表上执行DELETE操作时,我将“Copy”表上的“isdeleted”标志设置为true。但是,在插入冲突时,我希望更新“Copy”表和“isdeleted”标志。尝试对冲突(id)DO UPDATE使用,似乎只更新“主”表,而不处理“复制”表isdeleted'不是“主”表的一部分。“Main”表上的触发器是插入后的,删除前的 有人知道更新另一个冲突表的变通方法吗 BEGIN I

在“主”表中插入
INSERT
后,将Postgres触发器函数写入
INSERT
到“Copy”表中。在“Main”表上执行
DELETE
操作时,我将“Copy”表上的“isdeleted”标志设置为true。但是,在插入冲突时,我希望更新“Copy”表和“isdeleted”标志。尝试对冲突(id)DO UPDATE使用
似乎只更新“主”表,而不处理“复制”表isdeleted'不是“主”表的一部分。“Main”表上的触发器是插入后的
,删除前的

有人知道更新另一个冲突表的变通方法吗

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;

冲突时更新部分引用与插入相同的表以及已被拒绝的行。因此,您可以使用简单的:

  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;

哦,是的。你说得对。我一定是把考试搞砸了。非常感谢。