【发布时间】:2020-09-05 06:48:15
【问题描述】:
我有一个 postgres SQL 查询,我想在其中执行 upsert。
我的 pk1, pk2 列是复合主键。如果与主键约束冲突,我想更新 3 列 dk1, dk2, timek。
此外,当我更新冲突列时,比如timek 列,那么我需要检查新值是否小于旧值,并相应地选择是否需要使用旧值或新值。
这是我的查询,但它会引发错误。
我是 postgres SQL 的新手,请提出问题?
INSERT INTO data_reports (pk1, pk2, dk1, dk2, dk3, timek, valuek) VALUES (?, ?, ?, ?, ?, ?, ?)
ON CONFLICT (pk1, pk2) DO UPDATE SET
dk1 = EXCLUDED.dk1,
dk2 = CASE WHEN (dk2 < EXCLUDED.dk2) THEN EXCLUDED.dk2 ELSE dk2 END), // I believe dk2 (existing value in DB) is not selected but how to do that
timek = CASE WHEN (timek < EXCLUDED.timek) THEN EXCLUDED.timek ELSE timek END);
【问题讨论】:
标签: sql database postgresql upsert