PostgreSQL中json箭头操作符->、->>无法使用报错如何解决
报错原因
- 核心原因是你用于提取JSON键的
candidate_owner_json列的字段类型不是json/jsonb,而是text类型。PostgreSQL的->、->>操作符仅支持左操作数为json/jsonb类型,所以当你对text类型字段使用JSON操作符时,就会触发类型不匹配的报错。
解决方案
- 临时查询使用:你可以在查询时手动将text类型字段强转为json/jsonb类型,示例语句如下:
-- 提取json类型的ownerid值 SELECT candidate_owner_json::json -> 'ownerid' FROM candidate; -- 提取text类型的ownerid值 SELECT candidate_owner_json::json ->> 'ownerid' FROM candidate;
- 长期使用建议修改列类型:如果该列存储的都是合法的JSON格式数据,建议直接修改字段类型为
jsonb(性能优于json类型,支持索引),一劳永逸避免后续重复强转:
ALTER TABLE candidate ALTER COLUMN candidate_owner_json TYPE jsonb USING candidate_owner_json::jsonb;
- 注意:如果执行上述修改列类型的语句报错,说明该列存在不符合JSON格式的非法数据,你需要先清理所有非法数据后再执行类型修改操作。
内容的提问来源于stack exchange,提问作者Pehnt
相关产品推荐
相关产品推荐

