PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment interroger à l'aide de champs dans le nouveau type de données PostgreSQL JSON ?

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 et jsonb 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.