Dans PostgreSQL 9.2.3, j'essaie de créer ce tableau simplifié:
CREATE TABLE test (
user_id INTEGER,
startend TSTZRANGE,
EXCLUDE USING gist (user_id WITH =, startend WITH &&)
);
Mais je reçois cette erreur:
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.
La documentation PostgreSQL utilise cet exemple qui ne fonctionne pas pour moi:
CREATE TABLE room_reservation (
room text,
during tsrange,
EXCLUDE USING gist (room WITH =, during WITH &&)
);
Même message d'erreur.
Et celui-ci , qui ne fonctionne pas pour moi non plus:
CREATE TABLE zoo (
cage INTEGER,
animal TEXT,
EXCLUDE USING gist (cage WITH =, animal WITH <>)
);
Même message d'erreur.
Je suis capable de créer ceci sans aucun problème:
CREATE TABLE test (
user_id INTEGER,
startend TSTZRANGE,
EXCLUDE USING gist (startend WITH &&)
);
et ça:
CREATE TABLE test (
user_id INTEGER,
startend TSTZRANGE,
EXCLUDE USING btree (user_id WITH =)
);
J'ai passé pas mal de temps à chercher des indices sur la manière de faire fonctionner ce travail ou sur la raison pour laquelle cela ne fonctionnerait pas. Des idées?
Réponses:
Installez le module supplémentaire
btree_gist
comme indiqué dans le manuel à l'emplacement auquel vous avez lié :Dans PostgreSQL moderne, vous n’avez qu’à exécuter (une fois par base):
Le paquetage "contrib" doit d’abord être installé sur votre système d’exploitation. Les détails dépendent de votre système d'exploitation et du référentiel de logiciels utilisé. Pour la famille Debian, c'est typiquement
postgresql-contrib-9.2
(pour Postgres 9.2). Ou justepostgresql-contrib
pour la famille Red Hat. Considérez cette réponse sur SO:la source
ERROR: could not open extension control file "/opt/local/share/postgresql92/extension/btree_gist.control": No such file or directory
. J'ai également supposé qu'il était déjà installé car il...EXCLUDE USING gist (startend WITH &&)...
fonctionnait comme indiqué dans mon message d'origine. Merci de nous en occuper un millionième. Maintenant pour rechercher cette erreur.postgresql-contrib-9.2
dans votre système d'exploitation. Cela dépend de votre système d'exploitation. Considérez cette réponse connexe sur SO.port
outil.CREATE EXTENSION
.si quelqu'un ne peut ou ne veut pas utiliser ceci:
Comme dans mon cas, parce que Django 1.11 ORM ne supporte pas cet index et que je ne voulais pas écrire du SQL en dehors de Django. J'ai utilisé quelque chose de similaire à:
'[]' est utilisé pour s'assurer que les deux bornes sont inclusives. Testé avec Postgres 9.6 et 10.5.
la source