Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
J'utilise un champ de type "point" pour contenir des coordonnées géographiques. La finalité est de permettre une recherche par coordonnées géographique (exemple, avec une coordonnée et un rayon). Naturellement, une indexation de ce champ s'impose.
Lorsque j'essaie de créer un index
CREATE INDEX idx_geo
ON lieu USING gist (geo)
TABLESPACE pg_default;
Le champ de type "point" s'appelle "géo".
J'ai un message d'erreur.
ERREUR: le type de données point n'a pas de classe d'opérateurs par défaut pour la méthode d'accès à gist
HINT: 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.
Pour l'instant, j'utilise une base postgresql 8.4, mais une migration vers la version 9 est envisagée. J'ai consulté la page suivante, http://docs.postgresqlfr.org/8.4/xindex.html, mais je n'arrive pas à voir comment cela se passe concrètement.
Comment créer un index pour un champ de type "point" ?
Un coup de main serait le bienvenu.
A+
Xavier
Hors ligne
Vous n'avez pas d'opclass gist pour le type point en 8.4. Seulement en 9.0.
Vous pouvez contourner le problème (mais ce n'est pas beau) en définissant un index sur une 'box' qui contiendrait le point: create index mon_index using gist (box(geo,geo) using box_ops);
Mais ça complique le code, c'est vraiment laid. Le mieux, c'est de passer en 9.0
Marc.
Hors ligne
Merci pour le renseignement. Et avec la version 9, qu'est ce qui change ?
Hors ligne
En 9.0, il y a un opclass pour le point (un jeu de fonctions d'indexation, si vous voulez). Vous pouvez donc l'indexer directement, et l'utiliser directement, sans avoir à rajouter des appels à box partout. Ce qui est bien sûr bien plus naturel que de devoir passer par des boîtes de la taille du point
Marc.
Hors ligne
Pages : 1