Maison >base de données >tutoriel mysql >Comment rechercher des correspondances d'éléments de tableau JSON dans 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!