我有一个名为info
的jsonb列,其中某些类型具有对象的形式:{ id: 2 }
和其他一些类型的数组,其形状为:[{ id: 2 }]
我有一个查询可以做到这一点:
SELECT * FROM users
CROSS JOIN LATERAL jsonb_array_elements(users.info)
现在,如果我的数据集在info
列中只有数组,那么就没有问题,但是如果有一个不是数组而是对象的数组,则会出现错误:
ERROR: cannot extract elements from an object
PostgreSQL中是否有一种方法可以使CROSS JOIN LATERAL忽略info
列中不是数组的行?
答案 0 :(得分:0)
使用函数jsonb_typeof()
消除具有非数组jsonb列的行:
select *
from (
select *
from users
where jsonb_typeof(info) = 'array'
) s
cross join lateral jsonb_array_elements(info);