W PostgreSQL 9.2.3 próbuję utworzyć tę uproszczoną tabelę:
CREATE TABLE test (
user_id INTEGER,
startend TSTZRANGE,
EXCLUDE USING gist (user_id WITH =, startend WITH &&)
);
Ale pojawia się ten błąd:
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.
Dokumenty PostgreSQL używają tego przykładu, który nie działa dla mnie:
CREATE TABLE room_reservation (
room text,
during tsrange,
EXCLUDE USING gist (room WITH =, during WITH &&)
);
Ten sam komunikat o błędzie.
I ten , który też mi nie działa:
CREATE TABLE zoo (
cage INTEGER,
animal TEXT,
EXCLUDE USING gist (cage WITH =, animal WITH <>)
);
Ten sam komunikat o błędzie.
Jestem w stanie stworzyć to bez problemu:
CREATE TABLE test (
user_id INTEGER,
startend TSTZRANGE,
EXCLUDE USING gist (startend WITH &&)
);
i to:
CREATE TABLE test (
user_id INTEGER,
startend TSTZRANGE,
EXCLUDE USING btree (user_id WITH =)
);
Spędziłem sporo czasu na szukaniu wskazówek, jak wymyślić, jak to zrobić, lub dlaczego nie działa. Jakieś pomysły?
postgresql
constraint
installation
exclusion-constraint
gist-index
Ian Timothy
źródło
źródło
Odpowiedzi:
Zainstaluj dodatkowy moduł,
btree_gist
jak wspomniano w instrukcji, w lokalizacji, z którą łączysz się z :W nowoczesnym PostgreSQL wystarczy uruchomić (raz na bazę danych):
Najpierw musisz zainstalować pakiet „contrib” w systemie operacyjnym. Szczegóły zależą od systemu operacyjnego i używanego repozytorium oprogramowania. W przypadku rodziny Debian jest to zazwyczaj
postgresql-contrib-9.2
(w przypadku Postgres 9.2). Lub tylkopostgresql-contrib
dla rodziny Red Hat. Rozważ tę pokrewną odpowiedź na SO:źródło
ERROR: could not open extension control file "/opt/local/share/postgresql92/extension/btree_gist.control": No such file or directory
. Zakładałem również, że został już zainstalowany, ponieważ...EXCLUDE USING gist (startend WITH &&)...
działał jak pokazano w moim oryginalnym poście. Dzięki za zrobienie milionowego spojrzenia na to. Teraz zbadaj ten błąd.postgresql-contrib-9.2
najpierw musisz zainstalować pakiet contrib w systemie operacyjnym. Zależy od twojego systemu operacyjnego. Rozważ tę pokrewną odpowiedź na SO.port
narzędziem.CREATE EXTENSION
.jeśli ktoś nie może lub nie chce tego użyć:
Tak jak w moim przypadku, ponieważ Django 1.11 ORM nie obsługuje tego indeksu i nie chciałem pisać SQL poza Django. Użyłem czegoś podobnego do:
„[]” służy do upewnienia się, że obie granice są włącznie. Testowane z Postgres 9.6 i 10.5.
źródło