Di PostgreSQL 9.2.3 saya mencoba membuat tabel yang disederhanakan ini:
CREATE TABLE test (
user_id INTEGER,
startend TSTZRANGE,
EXCLUDE USING gist (user_id WITH =, startend WITH &&)
);
Tapi saya mendapatkan kesalahan ini:
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.
Dokumen PostgreSQL menggunakan contoh ini yang tidak berfungsi untuk saya:
CREATE TABLE room_reservation (
room text,
during tsrange,
EXCLUDE USING gist (room WITH =, during WITH &&)
);
Pesan kesalahan yang sama.
Dan yang ini , yang tidak bekerja untuk saya juga:
CREATE TABLE zoo (
cage INTEGER,
animal TEXT,
EXCLUDE USING gist (cage WITH =, animal WITH <>)
);
Pesan kesalahan yang sama.
Saya dapat membuat ini tanpa masalah:
CREATE TABLE test (
user_id INTEGER,
startend TSTZRANGE,
EXCLUDE USING gist (startend WITH &&)
);
dan ini:
CREATE TABLE test (
user_id INTEGER,
startend TSTZRANGE,
EXCLUDE USING btree (user_id WITH =)
);
Saya telah menghabiskan sedikit waktu mencari petunjuk tentang mencari tahu bagaimana membuat ini bekerja, atau mencari tahu mengapa itu tidak berhasil. Ada ide?
postgresql
constraint
installation
exclusion-constraint
gist-index
Ian Timothy
sumber
sumber
Jawaban:
Instal modul tambahan
btree_gist
sebagaimana disebutkan dalam manual di lokasi yang Anda tautkan :Di PostgreSQL modern Anda hanya perlu menjalankan (satu kali per basis data):
Anda harus menginstal paket "contrib" di OS Anda terlebih dahulu. Detail tergantung pada OS Anda dan repositori perangkat lunak yang digunakan. Untuk keluarga Debian biasanya
postgresql-contrib-9.2
(untuk Postgres 9.2). Atau hanyapostgresql-contrib
untuk keluarga Red Hat. Pertimbangkan jawaban terkait ini di SO:sumber
ERROR: could not open extension control file "/opt/local/share/postgresql92/extension/btree_gist.control": No such file or directory
. Saya juga berasumsi itu sudah diinstal karena...EXCLUDE USING gist (startend WITH &&)...
berfungsi seperti yang ditunjukkan pada posting asli saya. Terima kasih telah membuat yang kesekian juta melihat ini. Sekarang untuk meneliti kesalahan itu.postgresql-contrib-9.2
di OS Anda terlebih dahulu. Tergantung pada OS Anda. Pertimbangkan jawaban terkait ini di SO.port
alat ini.CREATE EXTENSION
.jika seseorang tidak dapat atau tidak ingin menggunakan ini:
Seperti dalam kasus saya, karena Django 1.11 ORM tidak mendukung indeks ini dan saya tidak ingin menulis SQL di luar Django. Saya menggunakan sesuatu yang mirip dengan:
'[]' digunakan untuk memastikan kedua batas inklusif. Diuji dengan Postgres 9.6 dan 10.5.
sumber