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

PostgreSQL中ON CONFLICT DO UPDATE更新所有字段语法问题咨询

解决PostgreSQL插入冲突时更新字段的问题

你的语句缺少两个关键部分:

  1. 必须在ON CONFLICT后指定冲突的目标列(也就是作为主键的name)
  2. DO UPDATE后需要明确写出要更新的字段和对应的值

方法一:逐个指定字段更新

直接把除name外的字段对应到新传入的参数:

INSERT INTO playlists (name, filter, selection, clips)
VALUES ($1, $2, $3, $4)
ON CONFLICT (name)
DO UPDATE SET
  filter = $2,
  selection = $3,
  clips = $4;

方法二:使用EXCLUDED简化写法

PostgreSQL提供EXCLUDED关键字,代表原本要插入的那条记录(也就是冲突时未插入的新数据),用它可以批量更新字段,避免重复写参数:

INSERT INTO playlists (name, filter, selection, clips)
VALUES ($1, $2, $3, $4)
ON CONFLICT (name)
DO UPDATE SET
  filter = EXCLUDED.filter,
  selection = EXCLUDED.selection,
  clips = EXCLUDED.clips;

注意事项

  • name是主键,冲突时无需更新,因此SET语句只处理其他字段
  • EXCLUDED写法更易维护,后续表结构变更时,只需调整INSERT的字段列表,更新部分无需重复修改参数位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 13:57:08