PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 20/10/2011 11:38:28

xavxav
Membre

Indexation d'un champ de type point

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

#2 20/10/2011 12:26:03

Marc Cousin
Membre

Re : Indexation d'un champ de type point

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 smile


Marc.

Hors ligne

#3 20/10/2011 15:37:55

xavxav
Membre

Re : Indexation d'un champ de type point

Merci pour le renseignement. Et avec la version 9, qu'est ce qui change ?

Hors ligne

#4 20/10/2011 16:09:22

Marc Cousin
Membre

Re : Indexation d'un champ de type point

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 smile


Marc.

Hors ligne

Pied de page des forums