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

Postgres 12 UPSERT更新失败报参数错误,求正确实现方案

修正后的Postgres 12 UPSERT语句

你的问题根源在于三点:表名用了Postgres保留关键字user、INSERT未包含冲突列id导致冲突无法触发、重复绑定参数引发编号错误。以下是修正后的语句:

INSERT INTO "user" (id, name, url)
VALUES (:userId, :name, :url)
ON CONFLICT (id)
DO UPDATE SET
  name = EXCLUDED.name,
  url = EXCLUDED.url

关键说明:

  • 表名user是Postgres保留关键字,必须用双引号"user"包裹才能正常执行。
  • INSERT列中加入id:需要更新时传入:userId,Postgres检测到id冲突后自动执行更新;插入新行时,将:userId设为DEFAULT(若id是自增主键,比如serial或identity类型),Postgres会自动生成新的主键值。
  • 使用EXCLUDED关键字引用INSERT语句中准备插入的字段值,避免重复绑定:name、:url参数,彻底解决参数编号错误问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 23:18:42