如何在PostgreSQL中的jsonb列的元素上使用LOWER?

问题描述

我有一个像这样的Postgresql表:

Table t

id | keys (jsonb)
---+----------------
 1 | ["Key1","Key2"]

我的目标是查询此表以找出jsonb数组列“ keys”中是否包含列表的键之一。


我设法使用以下方法获得结果

SELECT *
FROM t
WHERE keys ?| Array ['Key1','Key2'];

我找不到通过在表中的“键”值上应用lower()来扩大查询范围的方法

是否有一种方法可以遍历元素以将lower()应用于每个元素?

解决方法

您可能需要取消嵌套这两个数组:

select *
from t
where exists (
    select 1
    from jsonb_array_elements_text(t.keys) k1(val)
    inner join unnest(array['Key1','Key2']) k2(val)
        on lower(k1.val) = lower(k2.val)
)
,

由于上面的回复,我设法找到了一种做到这一点的方法:

SELECT *
FROM t,jsonb_array_elements_text(keys) key
WHERE lower(key) in ('key1','key2') ;