You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Upsert语句中DO UPDATE未更新目标记录问题排查求助

问题根因

你的SQL存在逻辑冲突:WHERE NOT EXISTS 子句会提前过滤掉所有临时表中core_id已经在主表存在的记录,最终进入INSERT环节的只有主表中不存在的新数据,完全不会触发ON CONFLICT的冲突更新逻辑,所以预期要更新的已存在记录不会产生任何变更。

修复方法

直接删除WHERE NOT EXISTS的过滤条件即可,冲突判断完全可以交给ON CONFLICT子句处理,修正后的SQL如下:

INSERT INTO main_table
SELECT *
FROM temp t
ON CONFLICT (core_id) DO UPDATE 
SET project_urls = EXCLUDED.project_urls

其他可选排查方向

如果修改后仍未达到预期效果,可以检查以下几点:

  • 确认主表的core_id字段设置了主键约束或者唯一约束,否则ON CONFLICT (core_id)无法正确识别冲突场景
  • 确认临时表中对应core_id的project_urls值和主表现有值存在差异,如果两者完全相同,数据库不会产生实际的变更记录
  • 检查主表是否存在更新触发器、行级安全策略等规则拦截了更新操作

内容的提问来源于stack exchange,提问作者L M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 22:24:01