PostgreSQL查询jsonb嵌套字段时出现column doesn't exist错误怎么办
PostgreSQL jsonb字段嵌套查询报错问题解答
问题原因
PostgreSQL 语法中,双引号(")用于标识数据库对象(表名、列名等),未被双引号包裹的标识符会被自动转为小写。你在->操作符后使用双引号包裹feePercent,PostgreSQL 会将其识别为列名,自动转为小写feepercent后查找对应列,因此触发列不存在的报错。
JSON/JSONB 类型的键名属于字符串值,需要使用单引号(')包裹,才会被识别为键名字符串传入->操作符。
解决方法
将->后的键名外层的双引号替换为单引号即可,正确查询语句如下:
select "uuid", "tax"->'feePercent' from "Site" where "uuid"='xxx';
如果需要直接返回文本类型的结果而非 jsonb 类型,可以改用->>操作符:
-- 返回text类型的结果 select "uuid", "tax"->>'feePercent' from "Site" where "uuid"='xxx'; -- 如需数值类型可自行强转 select "uuid", ("tax"->>'feePercent')::integer as fee_percent from "Site" where "uuid"='xxx';
内容的提问来源于stack exchange,提问作者Joey Yi Zhao
相关产品推荐
相关产品推荐

