2011-07-10 13 views
6

Voy de mysql a postgres y tengo problemas para crear un índice.postgres crear un índice

CREAR INDICE pointsloc ON table USANDO gist (point_col);

Esta es la respuesta que volver:

ERROR: Punto de tipo de datos no tiene ninguna clase de operador por defecto para el método de acceso "GIST" SUGERENCIA: Debe especificar una clase de operador para el índice o definir una clase de operador por defecto para el tipo de datos.

He visto que necesito especificar la clase de operador para el índice, se pueden usar diferentes clases según el tipo de operadores que desee utilizar en la columna. Deseo usar @> o ~ para encontrar si un punto está dentro de un polígono.

¿Cómo especifico la clase de operador? ayuda por favor tiene que ser algo simple pero estoy perplejo!

EDITAR

A continuación se muestra una pantalla de impresión de mí se trata de añadir un índice a la tabla de rama:

        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. 

Respuesta

3

parece estar funcionando bien cuando intento:

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

¿Está seguro de que su point_col realmente es del tipo point? Porque, si es un varchar, de hecho fallará miserablemente sin la contribución de btree_gist, y aun así no será muy útil.

+0

corrigió mi pregunta mostrando la pantalla de impresión y yo tratando de agregar un índice ... por favor dime que estoy siendo estúpido :) –

+0

Puede ser tu versión Postgresql. (Estoy ejecutando 9.1-beta, que tiene adiciones a la indexación de gist, por lo que podría ser por eso que no estoy recibiendo ningún error.) –

+0

Eso probablemente sea que estoy usando 8.1.23 en un sistema Centos 5.5. Hacer una actualización de yum muestra que no puedo actualizar a la versión más reciente de Postgres .... :(, cualquier idea sobre cómo se habría hecho con 8.1.23. Parece que no puedo encontrar información en ningún lugar para agregar las clases de operador al crear el índice o incluso cuáles necesitaría hacer la búsqueda de polígono/punto lol –

Cuestiones relacionadas