【发布时间】:2017-01-07 07:02:42
【问题描述】:
使用jsonb_array_elements()函数从Postgres中提取jsonb数据数组,报错:
无法从标量中提取元素
我认为是因为返回调用中的NULL,添加了NULL 检查条件但不起作用。任何帮助表示赞赏。
select id ,
CASE
WHEN report IS NULL OR
(report->'stats_by_date') IS NULL OR
(report->'stats_by_date'-> 'date') IS NULL then to_json(0)::jsonb
ELSE jsonb_array_elements(report -> 'stats_by_date' -> 'date')
END AS Date
from factor_reports_table
截断的 json 数组如下所示:
"stats_by_date": {"date": [16632, 16633, 16634, ...], "imps": [2418, 896, 1005...], ...}
【问题讨论】:
-
请提供您的示例 json 值。错误似乎很明显。您传递给
jsonb_array_elements的值是标量,而不是 json 数组。 -
"stats_by_date": {"date": [16632, 16633, 16634, 16635, 16636, 16637, 16638, 16639, 16640, 16641, 16642, 16643, 16644, 166645, 166645, 16648,16649,16650,16651,16652,16653,16654,16655,16656,16657,16658,16659,16660,16661,16662,16663,16664,16665,16666,16667,16668,16669,16670,16671,16672, 16673, 16674], "imps": [2418, 896, 1005...], ...}
-
它适用于限制多个条目,如果在所有数据表上循环,则会出现错误,因此可能有一些空值/标量传递给
jsonb_array_elements函数。想知道如何检查和绕过它
标签: arrays json postgresql jsonb