我有一个带有JSONB列的表,文档是这样的(简化(
{
"a": 1,
"rg": [
{
"rti": 2
}
]
}
我想过滤所有具有" RG"字段的行,并且数组中至少有一个'rti'field。
我当前的解决方案是
log->>'rg' ilike '%rti%'
是否有另一种方法,可能存在更快的解决方案。
另一种方法是将jsonb_each
应用于JSONB对象,然后将jsonb_array_elements_text
从jsonb_each
方法中应用于提取的值:
select id, js_value2
from
(
select (js).value as js_value, jsonb_array_elements_text((js).value) as js_value2,id
from
(
select jsonb_each(log) as js, id
from tab
) q
where (js).key = 'rg'
) q2
where js_value2 like '%rti%';
demo