179 votes

Comment créer un index sur un champ JSON dans Postgres ?

Dans PostgreSQL 9.3 Beta 2 ( ?), comment créer un index sur un champ JSON ? J'ai essayé en utilisant la fonction -> opérateur utilisé pour hstore mais j'ai obtenu l'erreur suivante :

 CREATE TABLE publishers(id INT, info JSON);
 CREATE INDEX ON publishers((info->'name'));

ERROR : le type de données json n'a pas de classe d'opérateur par défaut pour la méthode d'accès "btree" ASTUCE : Vous devez spécifier une classe d'opérateur pour l'index ou définir une classe d'opérateurs par défaut pour le type de données.

300voto

rlib Points 788

Trouvé :

CREATE TABLE publishers(id INT, info JSON); 
CREATE INDEX ON publishers((info->>'name'));

Comme indiqué dans les commentaires, la différence subtile ici est la suivante ->> au lieu de -> . Le premier renvoie la valeur sous forme de texte, le second sous forme d'objet JSON.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X