gpt4 book ai didi

sql - 如何在 postgres INSERT ON CONFLICT DO UPDATE 中返回列的旧值?

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

我正在尝试在 postgres 中运行“更新插入”,例如:

INSERT INTO my_table (
id, -- unique key
name,
hash
) VALUES (
'4b544dea-b355-463c-8fba-40c36ac7cb0c',
'example',
'0x0123456789'
) ON CONFLICT (
id
) DO UPDATE SET
name = 'example',
hash = '0x0123456789'
RETURNING
OLD.hash;

我想返回 hash 列的先前值(由于 OLD 不是有效的表别名,上面的示例不是有效查询)。重要的是,我正在尝试找到一种不会在负载下引起冲突的方法来执行此操作。这可能吗?或者是在事务中执行先读后写的唯一解决方案?

最佳答案

如果您愿意更新架构,另一个可能的答案是将之前的值存储在另一列中:

ALTER table my_table add column prev_hash text;

INSERT INTO my_table (
id, -- unique key
hash
) VALUES (
1,
'a'
) ON CONFLICT (
id
) DO UPDATE SET
hash = excluded.hash,
prev_hash = my_table.hash
RETURNING
id,
hash, -- will be the new hash
prev_hash -- will be the old hash

关于sql - 如何在 postgres INSERT ON CONFLICT DO UPDATE 中返回列的旧值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52191388/

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