gpt4 book ai didi

sql - Postgres 触发器函数 ON CONFLICT 更新另一个表

转载 作者:行者123 更新时间:2023-11-29 13:18:09 27 4
gpt4 key购买 nike

编写一个 Postgres 触发器函数以在“主”表中插入插入 到“复制”表中。在对“主”表执行 DELETE 操作时,我将“复制”表上的“isdeleted”标志设置为 true。但是,在插入冲突时,我希望更新“复制”表和“已删除”标志。尝试使用 ON CONFLICT(id) DO UPDATE 似乎只会更新“Main”表而不适用于“Copy”表。 'isdeleted' 不是“主”表的一部分。 “主”表上的触发器是 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;

最佳答案

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;

关于sql - Postgres 触发器函数 ON CONFLICT 更新另一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46105982/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com