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;
哦,是的。你说得对。我一定是把考试搞砸了。非常感谢。