PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Requête de tableau JSONB composite dans Postgres ?

Vous devez séparer les tableaux de niveau supérieur et vérifier les éléments à partir 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;

Quant à la meilleure façon de procéder, cela dépend beaucoup de vos données réelles - du nombre de lignes, de la taille de ces structures jsonb, etc. En général, cependant, une recherche comme "%3%" bénéficiera d'index basés sur hors de pg_trgm car ils ne peuvent pas utiliser les index btree traditionnels.

Edit :la requête de @Abelisto dans les commentaires est meilleure car elle devrait être plus performante, surtout si le contenu peut contenir des milliers d'éléments :

select * from test 
where exists 
  (select 1 
   from jsonb_array_elements(content) jae(elems) 
   where elems ->> 0 = 'first 1' 
   and elems ->> 1 ilike '%3%'
  );