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

如何将多个JSONB列合并为PostgreSQL生成列?

PostgreSQL JSONB生成列拼接字符串报错的解决办法

问题场景

针对单个JSONB列,执行以下添加生成列的SQL语句可以正常运行:

alter table r 
add column txt TEXT GENERATED ALWAYS as (
         doc->'contact'->>'name'
        ) stored;

但尝试拼接两个JSON提取结果时执行失败,报错信息为:SQL Error [42883]: ERROR: operator does not exist: text -> unknown
报错的SQL语句如下:

alter table r 
add column txt TEXT GENERATED ALWAYS as (
         doc->'contact'->>'name' || ' ' || doc->'contact'->>'phone'
        ) stored;

问题原因

PostgreSQL中字符串拼接运算符||的优先级高于JSON路径运算符->和->>,导致SQL解析时会先执行'name' || ' ',将其作为文本后再尝试执行->操作,而文本类型并不支持->运算符,因此触发错误。

正确解决方案

给每个JSON路径提取的表达式加上括号,强制改变运算顺序,确保先完成JSON字段的提取,再执行字符串拼接:

alter table r 
    add column txt TEXT GENERATED ALWAYS as (
             (doc->'contact'->>'name') || ' ' || (doc->'contact'->>'phone')
            ) stored;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:50:40