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

PostgreSQL冲突时如何实现字段值不匹配时追加更新

解决方案

你需要修改ON CONFLICT子句中bio字段的更新逻辑,核心是判断新旧bio值是否相同,不同则按规则追加内容,相同则保留原值。

修改后的SQL语句

INSERT INTO main_parse_user ("user_id","group_id", "username","bio", "first_name") 
VALUES (%s,%s,%s,%s,%s) 
ON CONFLICT (user_id) DO UPDATE SET 
    group_id = EXCLUDED.group_id,
    username = EXCLUDED.username,
    bio = CASE
        -- 新旧值相同,保留原值
        WHEN EXCLUDED.bio = main_parse_user.bio THEN main_parse_user.bio
        -- 原bio为空,直接使用新值(兼容原有逻辑)
        WHEN main_parse_user.bio IS NULL THEN EXCLUDED.bio
        -- 新旧值不同,按示例格式追加新值的差异部分
        ELSE main_parse_user.bio || ' | ' || substring(EXCLUDED.bio from length(main_parse_user.bio) + 1)
    END,
    first_name = EXCLUDED.first_name

逻辑说明

  • 相同值处理:当新传入的bio与数据库已有bio完全一致时,不做改动,保留原值。
  • 原值为空处理:如果数据库中原有bio是空值,直接替换为新传入的bio,延续你原本的逻辑。
  • 不同值追加:按照你给出的示例,提取新值中超出旧值长度的部分,用|分隔后追加到旧值末尾。

如果你的实际需求是将新旧完整值拼接(比如旧值qwerty、新值qwerty1时结果为qwerty | qwerty1),可将CASE中的对应分支修改为:

ELSE main_parse_user.bio || ' | ' || EXCLUDED.bio

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:32:32