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

如何在INSERT...ON CONFLICT时仅当旧值为NULL才更新列

调整UPSERT逻辑:仅当旧bio为空时更新该字段

你原来的SQL在遇到user_id冲突时会直接用新数据覆盖所有字段,现在要实现仅当旧数据的bio为None(空值)时才更新bio字段,其他字段仍保持原覆盖逻辑,可以修改ON CONFLICT部分的SET语句,给bio字段加上条件判断:

INSERT INTO main_parse_user ("user_id","group_id", "username", "bio", "first_name") 
VALUES ($1,$2,$3,$4,$5) 
ON CONFLICT (user_id) 
DO UPDATE 
SET 
  "group_id" = EXCLUDED.group_id,
  "username" = EXCLUDED.username,
  "bio" = COALESCE(main_parse_user.bio, EXCLUDED.bio),
  "first_name" = EXCLUDED.first_name

逻辑说明

  • COALESCE(main_parse_user.bio, EXCLUDED.bio)的作用是:优先取旧数据(main_parse_user.bio)的值,如果旧值为NULL(对应你说的None),则使用新数据(EXCLUDED.bio)的值
  • 其他字段(group_id、username、first_name)仍保持原逻辑,冲突时直接用新值覆盖旧值

以你给出的示例为例:

  • 数据库原有数据:12345|-10015488|@abcd|None|Dev
  • 插入新数据:12345|-10015488|@abcd|Developer|Dev
  • 执行修改后的SQL后,bio字段会从None更新为Developer,其余字段保持不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:35:37