En PostgreSQL 9.2.3 estoy tratando de crear esta tabla simplificada:
CREATE TABLE test (
user_id INTEGER,
startend TSTZRANGE,
EXCLUDE USING gist (user_id WITH =, startend WITH &&)
);
Pero me sale este error:
ERROR: data type integer 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.
Los documentos de PostgreSQL usan este ejemplo que no funciona para mí:
CREATE TABLE room_reservation (
room text,
during tsrange,
EXCLUDE USING gist (room WITH =, during WITH &&)
);
Mismo mensaje de error.
Y este , que tampoco funciona para mí:
CREATE TABLE zoo (
cage INTEGER,
animal TEXT,
EXCLUDE USING gist (cage WITH =, animal WITH <>)
);
Mismo mensaje de error.
Puedo crear esto sin ningún problema:
CREATE TABLE test (
user_id INTEGER,
startend TSTZRANGE,
EXCLUDE USING gist (startend WITH &&)
);
y esto:
CREATE TABLE test (
user_id INTEGER,
startend TSTZRANGE,
EXCLUDE USING btree (user_id WITH =)
);
He pasado bastante tiempo buscando pistas sobre cómo hacer que esto funcione o sobre por qué no funcionará. ¿Algunas ideas?
postgresql
constraint
installation
exclusion-constraint
gist-index
Ian Timothy
fuente
fuente
Respuestas:
Instale el módulo adicional
btree_gist
como se menciona en el manual en la ubicación a la que se vinculó :En PostgreSQL moderno solo necesita ejecutar (una vez por base de datos):
Primero debe tener instalado el paquete "contrib" en su sistema operativo. Los detalles dependen de su sistema operativo y del repositorio de software utilizado. Para la familia Debian es típicamente
postgresql-contrib-9.2
(para Postgres 9.2). O simplementepostgresql-contrib
para la familia Red Hat. Considere esta respuesta relacionada en SO:fuente
ERROR: could not open extension control file "/opt/local/share/postgresql92/extension/btree_gist.control": No such file or directory
. También supuse que ya estaba instalado porque...EXCLUDE USING gist (startend WITH &&)...
funcionaba como se muestra en mi publicación original. Gracias por echar un vistazo millonésimo a esto. Ahora para investigar ese error.postgresql-contrib-9.2
primero necesite instalar el paquete contrib en su sistema operativo. Depende de su sistema operativo. Considere esta respuesta relacionada en SO.port
herramienta.CREATE EXTENSION
.si alguien no puede o no quiere usar esto:
Como fue en mi caso, porque Django 1.11 ORM no admite este índice y no quería escribir SQL fuera de Django. Usé algo similar a:
'[]' se usa para asegurarse de que ambos límites sean inclusivos. Probado con Postgres 9.6 y 10.5.
fuente