sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Consulta de matriz JSONB compuesta en Postgres?

Debe dividir las matrices de nivel superior y verificar los elementos desde allí:

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;

En cuanto a la mejor manera de hacer esto, eso depende mucho de sus datos reales:cuántas filas, qué tan grandes son estas estructuras jsonb, etc. Sin embargo, en general, una búsqueda como me gusta '%3%' se beneficiará de los índices basados fuera de pg_trgm porque no pueden usar índices btree tradicionales.

Editar:la consulta de @Abelisto en los comentarios es mejor porque debería ser más eficaz, especialmente si el contenido puede contener miles 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%'
  );