2011-07-10 7 views
6

Je vais de mysql à postgres et j'ai un problème pour créer un index.postgres créer un index

CREATE INDEX pointsloc ON table UTILISATION de gist (point_col);

C'est la réponse que je retourner:

ERREUR: point de type de données n'a pas de classe opérateur par défaut pour la méthode d'accès « essentiel » TRUC: Vous devez spécifier une classe d'opérateur pour l'indice ou définir une classe d'opérateur par défaut pour le type de données.

J'ai vu que je devais spécifier la classe d'opérateur pour l'index, différentes classes peuvent être utilisées en fonction du type d'opérateurs que vous souhaitez utiliser sur la colonne. Je souhaite utiliser @> ou ~ pour trouver si un point est dans un polygone.

Comment spécifier la classe d'opérateur? aider s'il vous plaît doit être une chose simple, mais je suis perplexe!

EDIT

Ci-dessous est un écran d'impression de moi essayant d'ajouter un index à la table de branche:

        Table "public.branch" 
     Column  |  Type  |      Modifiers      
------------------+------------------+----------------------------------------------------- 
id    | integer   | not null default nextval('branch_id_seq'::regclass) 
name    | character(120) | 
center_point_lat | double precision | 
center_point_lng | double precision | 
center_point  | point   | 
Indexes: 
    "branch_pkey" PRIMARY KEY, btree (id) 

paul=# create index pt_idx on branch using gist (center_point); 
ERROR: data type point has no default operator class for access method "gist" 
HINT: You must specify an operator class for the index or define a default operator class for the data type. 

Répondre

3

semble fonctionner très bien quand je tente:

test=# create table test (pt point); 
CREATE TABLE 
test=# create index pt_idx on test using gist (pt); 
CREATE INDEX 

Etes-vous sûr (e) que votre point_col effectivement est de type point? Parce que, si c'est un varchar, il échouera en effet misérablement sans la contribution de btree_gist - et même alors cela ne sera pas très utile.

+0

édité ma question montrant l'écran d'impression et moi essayant d'ajouter un index ... s'il vous plaît dites-moi que je suis stupide :) –

+0

Il pourrait être votre version de Postgresql. (Je suis en cours d'exécution 9.1-bêta, qui a des ajouts à l'indexation, donc c'est peut-être pourquoi je ne reçois aucune erreur.) –

+0

Ce sera probablement que j'utilise 8.1.23 sur un système Centos 5.5. Faire une mise à jour de yum montre que je ne peux pas mettre à jour vers la version postgres plus récente .... :(, des idées sur la façon dont il aurait été fait avec 8.1.23 Je ne peux pas trouver des informations n'importe où pour ajouter les classes opérateur lors de la création index ou même ceux dont je aurais besoin pour faire la recherche de polygone/point lol –

Questions connexes