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

INSERT...RETURNING仅首次插入返回结果是否为该语句的预期行为?

结论

这是INSERT ... ON CONFLICT DO NOTHING RETURNING语句的预期正常行为。

核心逻辑
  • RETURNING子句仅会返回当前SQL语句实际成功写入/修改的行,如果语句执行过程中没有任何行被新增或变更,就不会有返回结果。
  • 第二次执行语句时,mrn和name列的唯一约束命中冲突,触发了你设置的ON CONFLICT DO NOTHING逻辑,没有新行被插入到表中,因此不会返回id字段,同时也不会抛出冲突报错。
适配写法

如果需要无论插入新行还是命中已有行,都能拿到对应记录的id值,可以调整为无实际变更的ON CONFLICT DO UPDATE写法:

INSERT INTO identities (mrn, name) 
VALUES('x', 'y') 
ON CONFLICT (mrn, name) DO UPDATE SET mrn = EXCLUDED.mrn
RETURNING id;

上面的DO UPDATE是无业务逻辑的空更新,不会修改已有数据,但可以触发RETURNING返回已有行的id。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:09:02