You need to enable JavaScript to run this app. PostgreSQL插入语句聚合新增has_property字段时报GROUP BY错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL插入语句聚合新增has_property字段时报GROUP BY错误如何解决

SQL调整方案

由于同个code分组下的所有源记录has_property值完全一致,只需要给查询中的has_property列套上聚合函数,满足SQL分组语法的校验规则即可,取值结果完全准确。

调整后可直接运行的SQL

sql = """
    insert into metadata (code, code_map, has_property) (
        select
            code,
            jsonb_agg(to_jsonb(new_code)) as code_map,
            max(has_property) as has_property
        from data_to_data
        where code is not null
        group by 1
    ) on conflict (code) do update
    set 
        code_map = excluded.code_map,
        has_property = excluded.has_property;
    """

可选的聚合替换方式

因为同组内has_property值没有差异,以下任意一种聚合函数都能拿到正确结果,可按环境选型:

  • max(has_property):兼容所有PostgreSQL版本,无版本依赖
  • bool_or(has_property):布尔类型专用聚合函数,语义更直白
  • any_value(has_property):PostgreSQL 13及以上版本支持,直接取组内任意一条的对应值,聚合性能最优

关键细节

原逻辑的冲突更新分支仅同步了code_map字段,这次调整已经把has_property加入更新列表,保证code重复触发冲突时,metadata表的字段值和源表最新数据对齐,不会残留旧值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 08:15:07