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

PostgreSQL中整数与JSONB使用UNION ALL报错问题求助

这个错误的核心原因很直白——PostgreSQL 的 UNION ALL 要求合并的两个查询里,对应列的数据类型必须完全一致,你现在一边返回的是 integer 类型,另一边用 -> 运算符提取 JSONB 字段得到的是 jsonb 类型,自然没法匹配。给你两种实用的解决思路,按需选择:

方案1:把JSONB提取的值转成整数(推荐,适合需要数值类型的场景)

用 ->> 运算符代替 ->,它会把 JSON 里的字段值直接提取成文本类型,再转成整数,让两边的类型统一为 integer:

SELECT 10 as price 
UNION ALL 
SELECT ('{"price":2}'::jsonb->>'price')::integer as price;

这里的 ->> 负责把 JSONB 对象里的 price 值转为 text,后面的 ::integer 再把 text 转成整数,和第一个查询的类型完美对齐。

方案2:把整数转成JSONB类型(适合需要保留JSON特性的场景)

如果你的业务场景需要统一使用 JSONB 类型,那反过来把第一个查询的整数转成 JSONB 即可:

SELECT 10::jsonb as price 
UNION ALL 
SELECT '{"price":2}'::jsonb->'price' as price;

这样两边返回的都是 JSONB 类型,UNION ALL 就能顺利执行了。

顺便提个容易踩坑的小细节:PostgreSQL 里 -> 和 ->> 的区别要记牢——-> 返回 JSONB 类型,->> 返回文本类型,下次用的时候别搞混哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:36:14