Maison >base de données >tutoriel mysql >Comment rechercher des correspondances d'éléments de tableau JSON dans PostgreSQL ?

Comment rechercher des correspondances d'éléments de tableau JSON dans PostgreSQL ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-15 10:49:43169parcourir

How to Query for JSON Array Element Matches in PostgreSQL?

Requête d'un élément de tableau JSON correspondant dans PostgreSQL

Le type de données JSON de PostgreSQL peut être délicat lors de l'interrogation d'éléments spécifiques dans des tableaux imbriqués. Prenons l'exemple suivant :

<code>{
  "objects": [{"src":"foo.png"},
{"src":"bar.png"}],
  "background":"background.png"
}</code>

Afin d'interroger les enregistrements dont la valeur "src" correspond à "foo.png" dans le tableau "objects", vous pouvez utiliser une jointure latérale dans la clause FROM.

PostgreSQL 9.3 et supérieur

Pour PostgreSQL 9.3 et supérieur, utilisez la fonction json_array_elements() pour développer le tableau "objects" et tester chaque élément :

<code class="language-sql">SELECT data::text, obj
FROM   reports r, json_array_elements(r.data#>'{objects}') obj
WHERE  obj->>'src' = 'foo.png';</code>

PostgreSQL 9.4 et supérieur

Dans PostgreSQL 9.4 et supérieur, vous devez utiliser la fonction jsonb_array_elements() et créer un index GIN correspondant sur l'expression :

<code class="language-sql">CREATE INDEX reports_data_gin_idx ON reports
USING gin ((data->'objects') jsonb_path_ops);

SELECT * FROM reports WHERE data->'objects' @> '[{"src":"foo.png"}]';</code>

N'oubliez pas que pour la correspondance de tableaux, les éléments doivent être placés entre crochets, alors que la correspondance d'objets normale ne nécessite pas de crochets. Pour plus de détails et des solutions de contournement, consultez la documentation liée et les autres ressources fournies dans la question.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn