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

PostgreSQL13 INSERT ON CONFLICT语法报错,需实现存在返回id否则插入返回id

问题排查与解决方案

错误原因

  • 第一个语法错误:RETURNING 子句的位置错误,INSERT 语句的 ON CONFLICT 逻辑必须放在 VALUES 子句之后、RETURNING 子句之前,且整个语句仅需要最后写一次 RETURNING 即可,不需要分两处写。
  • 第二个语法错误:ON CONFLICT ... DO UPDATE 后不需要重复指定表名,当前操作默认针对插入的目标表。

正确实现语句

INSERT INTO project_test(project_id) 
VALUES(50) 
ON CONFLICT (project_id) 
DO UPDATE SET id = project_test.id -- 无实际修改的空更新,仅触发返回逻辑
RETURNING id;

可选优化

如果不需要触发任何更新相关的副作用(比如行级更新触发器),也可以用更轻量的写法:

WITH inserted AS (
    INSERT INTO project_test(project_id)
    VALUES (50)
    ON CONFLICT (project_id) DO NOTHING
    RETURNING id
)
SELECT id FROM inserted
UNION ALL
SELECT id FROM project_test WHERE project_id = 50
LIMIT 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:36:01