In PostgreSQL 9.2.3 versuche ich, diese vereinfachte Tabelle zu erstellen:
CREATE TABLE test (
user_id INTEGER,
startend TSTZRANGE,
EXCLUDE USING gist (user_id WITH =, startend WITH &&)
);
Aber ich bekomme diesen Fehler:
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.
Die PostgreSQL-Dokumente verwenden dieses Beispiel, das für mich nicht funktioniert:
CREATE TABLE room_reservation (
room text,
during tsrange,
EXCLUDE USING gist (room WITH =, during WITH &&)
);
Gleiche Fehlermeldung.
Und dieser , der auch bei mir nicht funktioniert:
CREATE TABLE zoo (
cage INTEGER,
animal TEXT,
EXCLUDE USING gist (cage WITH =, animal WITH <>)
);
Gleiche Fehlermeldung.
Ich kann das problemlos erstellen:
CREATE TABLE test (
user_id INTEGER,
startend TSTZRANGE,
EXCLUDE USING gist (startend WITH &&)
);
und das:
CREATE TABLE test (
user_id INTEGER,
startend TSTZRANGE,
EXCLUDE USING btree (user_id WITH =)
);
Ich habe ziemlich viel Zeit damit verbracht, nach Hinweisen zu suchen, um herauszufinden, wie dies funktioniert oder warum es nicht funktioniert. Irgendwelche Ideen?
postgresql
constraint
installation
exclusion-constraint
gist-index
Ian Timothy
quelle
quelle
Antworten:
Installieren Sie das Zusatzmodul
btree_gist
wie im Handbuch beschrieben an dem Speicherort, zu dem Sie eine Verknüpfung hergestellt haben :In modernen PostgreSQL müssen Sie nur einmal pro Datenbank ausführen:
Sie müssen zuerst das "contrib" -Paket in Ihrem Betriebssystem installiert haben. Details hängen von Ihrem Betriebssystem und dem verwendeten Software-Repository ab. Für die Debian-Familie ist dies typisch
postgresql-contrib-9.2
(für Postgres 9.2). Oder nurpostgresql-contrib
für die Red Hat-Familie. Betrachten Sie diese verwandte Antwort auf SO:quelle
ERROR: could not open extension control file "/opt/local/share/postgresql92/extension/btree_gist.control": No such file or directory
. Ich ging auch davon aus, dass es bereits installiert war, da das...EXCLUDE USING gist (startend WITH &&)...
wie in meinem ursprünglichen Beitrag gezeigt funktionierte. Vielen Dank, dass Sie sich das millionenfach angesehen haben. Um diesen Fehler zu untersuchen.postgresql-contrib-9.2
in Ihrem Betriebssystem installieren . Hängt von Ihrem Betriebssystem ab. Betrachten Sie diese verwandte Antwort auf SO.port
Tool installiert wurde .CREATE EXTENSION
.wenn jemand dies nicht benutzen kann oder will:
Wie in meinem Fall, weil Django 1.11 ORM diesen Index nicht unterstützt und ich SQL nicht außerhalb von Django schreiben wollte. Ich habe etwas Ähnliches benutzt wie:
'[]' wird verwendet, um sicherzustellen, dass beide Schranken inklusiv sind. Getestet mit Postgres 9.6 und 10.5.
quelle