Dans PostgreSQL 9.3 Beta 2 (?), Comment créer un index sur un champ JSON? Je l'ai essayé en utilisant l' ->
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'));
ERREUR: 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" CONSEIL: Vous devez spécifier une classe d'opérateur pour l'index ou définir une classe d'opérateur par défaut pour le type de données.
Réponses:
A trouvé:
Comme indiqué dans les commentaires, la différence subtile ici est
->>
au lieu de->
. Le premier renvoie la valeur sous forme de texte, le second sous forme d'objet JSON.la source
->>
au lieu de->
. Le premier renvoie la valeur sous forme de texte, le second renvoie un objet JSON.TEXT
, cependant. Si vous voulez faire des comparaisons d'entiers au lieu de comparaisons de chaînes, vous devez ajouter un casting:((info->>'name')::INT)
.create index idx_name on table_name ((json_column->'child_obj'->>'child_obj_field'));
Nous devons d'abord utiliser->
pour obtenir l'objet JSON, puis->>
pour obtenir la valeur de l'objet enfant comme texte.