PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Consulta de matriz JSONB composta no Postgres?


Você deve separar os arrays de nível superior e verificar os elementos de lá:
select distinct id, content
FROM test
JOIN lateral (
    select elems 
    FROM jsonb_array_elements(content) jae(elems)
) all_arrays ON TRUE
WHERE elems ->> 0 = 'first 1'
and elems ->> 1 ilike '%3%'
ORDER BY 1;

Quanto à melhor maneira de fazer isso, isso depende muito de seus dados reais - quantas linhas, quão grandes são essas estruturas jsonb, etc. Em geral, porém, uma pesquisa como ilike '%3%' se beneficiará de índices baseados fora do pg_trgm porque eles não podem usar índices btree tradicionais.

Edit:a consulta de @Abelisto nos comentários é melhor porque deve ter mais desempenho, especialmente se o conteúdo puder conter milhares de elementos:
select * from test 
where exists 
  (select 1 
   from jsonb_array_elements(content) jae(elems) 
   where elems ->> 0 = 'first 1' 
   and elems ->> 1 ilike '%3%'
  );