有条件地做 jsonb_array_elements
Conditionally do 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列为non-array的行:
select *
from (
select *
from users
where jsonb_typeof(info) = 'array'
) s
cross join lateral jsonb_array_elements(info);
我有一个名为 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列为non-array的行:
select *
from (
select *
from users
where jsonb_typeof(info) = 'array'
) s
cross join lateral jsonb_array_elements(info);