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.