如何从JSONB数组字段中具有JSONB嵌套字段的PostgreSQL过滤数据



我有一个带有JSONB列的表,文档是这样的(简化(

{
      "a": 1,
      "rg": [
        {
          "rti": 2
        }
      ]
    }

我想过滤所有具有" RG"字段的行,并且数组中至少有一个'rti'field。

我当前的解决方案是

log->>'rg' ilike '%rti%'

是否有另一种方法,可能存在更快的解决方案。

另一种方法是将jsonb_each应用于JSONB对象,然后将jsonb_array_elements_textjsonb_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

最新更新