有条件地做JSONB_ARRAY_ELEMENTS



我有一个称为 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中有一种方法可以忽略info列中不是数组的行?

使用函数jsonb_typeof()用非阵列JSONB列消除行:

select *
from (
    select *
    from users
    where jsonb_typeof(info) = 'array'
    ) s
cross join lateral jsonb_array_elements(info);

Rextester中的工作示例。

最新更新