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
Libérer: 2025-01-15 10:49:43
original
204 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal