gpt4 book ai didi

postgresql - 使用 on 与 Postgres 冲突时如何避免不必要的更新?

转载 作者:行者123 更新时间:2023-12-05 02:39:00 25 4
gpt4 key购买 nike

我的用例涉及定期将表与上游源同步。

每一行都有一个唯一标识符和其他列,我想确保插入任何新的上游行,并更新任何更改的上游行。并且可能有数千行要同步。

但我想避免不必要的更新,因为数据库中的行与上游的行没有区别。

目前我正在使用 ON CONFLICT UPDATE 像这样:

INSERT INTO symbols (id, name, status) 
VALUES
(1, 'one', 'online'),
(2, 'two', 'offline'),
...
ON CONFLICT (id)
UPDATE SET (id, name, status) = (excluded.id, excluded.name, excluded.status)
RETURNING *

但是即使没有任何变化,这也会写入更新。我应该如何调整 UPDATE 以高效地检查并应用于需要它的行?

最佳答案

您可以添加一个 where 子句以仅更新那些不同的行。

INSERT INTO symbols (id, name, status) 
VALUES
(1, 'one', 'online'),
(2, 'two', 'offline'),
...
ON CONFLICT (id) DO
UPDATE SET (id, name, status) = (excluded.id, excluded.name, excluded.status)
WHERE (symbols.id, symbols.name, symbols.status) IS DISTINCT FROM (excluded.id, excluded.name, excluded.status)
RETURNING *

但是,这只会返回实际更新的行,这可能会影响您使用 returning 子句的方式。

关于postgresql - 使用 on 与 Postgres 冲突时如何避免不必要的更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69292191/

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