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

PostgreSQL 9.6执行INSERT ON CONFLICT更新时excluded.column相关报错如何解决

问题根因

你第二次报错的核心原因是:excluded 虚拟表的列名和你 INSERT 语句中指定的目标表字段名完全对应,和源表temp1的列名无关。
你写的插入语句是INSERT INTO lokasi_esb(id_esb, id_vertex_nearest) select id_esb,id_vertex from temp1,此时待插入的行在excluded里对应的两列名是id_esb、id_vertex_nearest,你取excluded.id_vertex自然会提示字段不存在。

修复方案

方案1:直接调整引用的excluded列名(推荐,改一处即可)

INSERT INTO lokasi_esb(id_esb, id_vertex_nearest) 
select id_esb,id_vertex 
from temp1
ON CONFLICT (id_esb) DO UPDATE
SET id_vertex_nearest = excluded.id_vertex_nearest;

方案2:用UPDATE FROM语法(适合仅更新已有id_esb、不需要插入新行的场景)

如果你的需求只是给lokasi_esb里已存在的id_esb更新最近顶点id,不需要把temp1里独有的id_esb插入到lokasi_esb,用这个写法逻辑更准确:

UPDATE lokasi_esb
SET id_vertex_nearest = temp1.id_vertex
FROM temp1
WHERE lokasi_esb.id_esb = temp1.id_esb;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:27:05