Maison > base de données > tutoriel mysql > Comment puis-je interroger des éléments spécifiques dans les tableaux JSON dans PostgreSQL ?

Comment puis-je interroger des éléments spécifiques dans les tableaux JSON dans PostgreSQL ?

DDD
Libérer: 2025-01-15 10:12:42
original
813 Les gens l'ont consulté

How Can I Query Specific Elements Within JSON Arrays in PostgreSQL?

Interrogation des éléments du tableau JSON dans PostgreSQL

PostgreSQL 9.3 et versions ultérieures prennent en charge le type de données JSON, permettant aux données JSON d'être stockées et manipulées dans la base de données. Cette fonctionnalité permet de stocker des structures de données complexes (telles que des tableaux d'objets) dans une seule colonne. Cependant, rechercher des éléments ou des valeurs spécifiques au sein de ces structures complexes peut s'avérer difficile.

Supposons que la colonne nommée « data » dans la table « reports » stocke les données JSON suivantes :

<code class="language-json">{
  "objects": [
    {"src":"foo.png"},
    {"src":"bar.png"}
  ],
  "background":"background.png"
}</code>
Copier après la connexion

Une tâche courante consiste à récupérer tous les rapports contenant une valeur spécifique du champ "src" du tableau "objects". Interroger un champ JSON plat comme « background » est simple, mais extraire des éléments dans un tableau nécessite une approche différente.

La requête suivante récupère avec succès tous les rapports correspondant à la valeur « arrière-plan » donnée :

<code class="language-sql">SELECT data AS data FROM reports WHERE data->>'background' = 'background.png'</code>
Copier après la connexion

Cependant, essayez d'interroger les valeurs dans le tableau "objets" en utilisant une syntaxe similaire (par exemple) :

<code class="language-sql">SELECT data AS data FROM reports WHERE data->>'objects' = 'foo.png'</code>
Copier après la connexion

ne produira pas les résultats attendus car les "objets" sont des tableaux, pas de simples champs.

Pour réussir à interroger des éléments dans un tableau JSON, vous pouvez utiliser la fonction json_array_elements() dans une jointure horizontale. Cette fonction extrait un seul élément d'un tableau, vous permettant de tester chaque élément individuellement.

La requête suivante utilise une jointure latérale pour développer le tableau "objects" et tester la présence d'une valeur "src" spécifique :

<code class="language-sql">SELECT data AS data
FROM reports r, json_array_elements(r.data#>'{objects}') obj
WHERE obj->>'src' = 'foo.png';</code>
Copier après la connexion

Alternativement, pour un seul niveau d'imbrication, vous pouvez utiliser une version simplifiée de la requête :

<code class="language-sql">SELECT *
FROM reports r, json_array_elements(r.data->>'objects') obj
WHERE obj->>'src' = 'foo.png';</code>
Copier après la connexion

Ces requêtes utilisent les opérateurs #>, -> et ->> pour parcourir la structure JSON. Consultez la documentation PostgreSQL pour plus de détails sur ces opérateurs.

De plus, pour optimiser les performances des requêtes JSON complexes impliquant des tableaux, pensez à ajouter un index GIN sur l'expression JSON appropriée. Cela peut améliorer considérablement la vitesse de recherche, en particulier dans le cas d’ensembles de données volumineux.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal