【发布时间】:2020-11-14 02:13:20
【问题描述】:
我有一个 PostgreSQL 9.3.10 数据库,一个包含 15842 条记录的表,并使用 Intellij 进行查询。 我想从 JSON 列(名为“数据”)中查询一些最近的数据。
我的查询就是这么简单:
select data->'header'
from some_table
order by id desc
问题是我得到了:
[22023] 错误:无法从标量中提取元素
当我使用desc 命令时。当我使用asc 时,查询不会失败,并且至少收到前 500 条记录。
对我来说,最近的一些记录可能包含无效的 JSON。如果是这样,我怎样才能忽略不良记录并仍然使用DESC 排序执行查询?或者如何识别损坏的 JSON 记录?
我也认为它可能是由空数据引起的,但select * from table where data is null 没有显示任何结果。
UPD:“数据”列的类型是json。我发现有些行将 json 数据序列化为字符串(由于后端错误)。所以不是普通的 json object: {} 值是一个带引号的对象 string "{}"。由以下查询检测到:select data from some_table where data::text not like '{%'
【问题讨论】:
标签: sql json postgresql where-clause postgresql-9.3