J'essaye de tester le json
type dans PostgreSQL 9.3.
J'ai une json
colonne appelée data
dans une table appelée reports
. Le JSON ressemble à quelque chose comme ceci:
{
"objects": [
{"src":"foo.png"},
{"src":"bar.png"}
],
"background":"background.png"
}
Je voudrais interroger la table pour tous les rapports qui correspondent à la valeur «src» dans le tableau «objets». Par exemple, est-il possible d'interroger la base de données pour tous les rapports qui correspondent 'src' = 'foo.png'
? J'ai écrit avec succès une requête qui peut correspondre à "background"
:
SELECT data AS data FROM reports where data->>'background' = 'background.png'
Mais depuis "objects"
a un tableau de valeurs, je n'arrive pas à écrire quelque chose qui fonctionne. Est-il possible d'interroger la base de données pour tous les rapports qui correspondent 'src' = 'foo.png'
? J'ai parcouru ces sources mais je ne peux toujours pas l'obtenir:
- http://www.postgresql.org/docs/9.3/static/functions-json.html
- Comment faire une requête en utilisant des champs dans le nouveau type de données JSON PostgreSQL?
- http://michael.otacoo.com/postgresql-2/postgres-9-3-feature-highlight-json-operators/
J'ai également essayé des choses comme celle-ci, mais en vain:
SELECT json_array_elements(data->'objects') AS data from reports
WHERE data->>'src' = 'foo.png';
Je ne suis pas un expert SQL, donc je ne sais pas ce que je fais de mal.
jsonb
/ pg 9.4. A part: pour le cas simple (1 niveau d'imbrication), l'->
opérateur fait également le tour de lajson
page 9.3.Créer une table avec une colonne de type json
Maintenant, insérons des données json
Maintenant, faisons quelques requêtes pour récupérer des données
Vous avez peut-être remarqué que les résultats sont accompagnés d'une virgule inversée (") et de crochets ([])
Maintenant, pour récupérer uniquement les valeurs, utilisez simplement
->>
la source
sélectionnez data -> 'objects' -> 0 -> 'src' as SRC from table where data -> 'objects' -> 0 -> 'src' = 'foo.png'
la source