Postgres 9.2
Je cite Andrew Dunstan sur la liste pgsql-hackers :
À un moment donné, il y aura peut-être des fonctions de traitement json (par opposition à la production de json), mais pas dans 9.2.
Cela ne l'empêche pas de fournir un exemple d'implémentation dans PLV8 qui devrait résoudre votre problème. (Le lien est mort maintenant, voir le PLV8 moderne à la place.)
Postgres 9.3
Offre un arsenal de nouvelles fonctions et opérateurs pour ajouter "json-processing".
- Le manuel sur la nouvelle fonctionnalité JSON.
- Le wiki Postgres sur les nouvelles fonctionnalités de la page 9.3.
La réponse à la question initiale dans Postgres 9.3 :
SELECT *
FROM json_array_elements(
'[{"name": "Toby", "occupation": "Software Engineer"},
{"name": "Zaphod", "occupation": "Galactic President"} ]'
) AS elem
WHERE elem->>'name' = 'Toby';
Exemple avancé :
- Combinaisons de requêtes avec tableau imbriqué d'enregistrements dans le type de données JSON
Pour les tables plus volumineuses, vous pouvez ajouter un index d'expression pour augmenter les performances :
- Index pour trouver un élément dans un tableau JSON
Postgres 9.4
Ajoute jsonb
(b pour "binary", les valeurs sont stockées en tant que types Postgres natifs) et encore plus de fonctionnalités pour les deux les types. En plus des index d'expression mentionnés ci-dessus, jsonb
prend également en charge les index GIN, btree et hash, GIN étant le plus puissant d'entre eux.
- Le manuel sur
json
etjsonb
types de données et fonctions. - Le wiki Postgres sur JSONB à la page 9.4
Le manuel va jusqu'à suggérer :
En général, la plupart des applications devraient préférer stocker les données JSON en tant que
jsonb
, à moins qu'il n'y ait des besoins assez spécialisés, tels que des hypothèses héritées sur l'ordre des clés d'objet.
J'insiste sur moi.
Les performances bénéficient des améliorations générales apportées aux index GIN.
Postgres 9.5
Compléter jsonb
fonctions et opérateurs. Ajouter plus de fonctions pour manipuler jsonb
en place et pour l'affichage.
- Bonne nouvelle majeure dans les notes de version de Postgres 9.5.