gpt4 book ai didi

postgresql - 有条件地执行 jsonb_array_elements

转载 作者:行者123 更新时间:2023-11-29 13:40:23 34 4
gpt4 key购买 nike

我有一个名为 info 的 jsonb 列,某些类型具有对象的形式:{ id: 2 }

和一些其他类型它具有数组的形状:[{ id: 2 }]

我有一个执行此操作的查询:

SELECT * FROM users
CROSS JOIN LATERAL jsonb_array_elements(users.info)

现在,如果我的数据集在 info 列中只有数组,则没有问题,但如果有一个不是数组而是对象的数组,我会收到错误消息:

错误:无法从对象中提取元素

在 PostgreSQL 中有没有办法让 CROSS JOIN LATERAL 忽略 info 列中不是数组的行?

最佳答案

使用函数 jsonb_typeof()消除具有非数组 jsonb 列的行:

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

Working example in rextester.

关于postgresql - 有条件地执行 jsonb_array_elements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56296216/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com