PostgreSQL / PostGIS 9.6 memecahkan indeks gabungan saya


8

Dalam PostgreSQL 9.2 saya tidak punya masalah membuat indeks yang memiliki tipe geografi (postGIS) dan dan integer sebagai indeks gabungan. Tapi sekarang (9.6) itu mengeluh tentang pembuatan indeks dan saya tidak mengerti petunjuk yang diberikannya:

Kolom dan data semuanya dibuat dengan benar, Postgres mengeluhkan indeks buat.

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. 
********** Error**********  
ERROR: data type integer has no default operator class for access method "gist" 
SQL state: 42704 
Hint: You must specify an operator class for the index 
      or define a default operator class for the data type.

Definisi skema adalah sebagai berikut:

- Table: portal.inventory

-- DROP TABLE portal.inventory;

CREATE TABLE portal.inventory
(
  type character varying,
  pid integer,
  size bigint,
  date timestamp without time zone,
  path character varying,
  outline geography(Polygon,4326)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE portal.inventory
  OWNER TO postgres;

-- Index: portal.inventory_compound_idx

-- DROP INDEX portal.inventory_compound_idx;

CREATE INDEX inventory_compound_idx
  ON portal.inventory
  USING gist
  (outline, pid);

-- Index: portal.inventory_icompound_idx

-- DROP INDEX portal.inventory_icompound_idx;

CREATE INDEX inventory_icompound_idx
  ON portal.inventory
  USING gist
  (pid, outline);

Jawaban:


8

Anda perlu menginstal spesifik EXTENSIONdi database Anda:

CREATE EXTENSION btree_gist ;

Menurut dokumentasi PostgreSQL di btree_gist :

btree_gist menyediakan kelas operator indeks GiST yang menerapkan perilaku setara B-tree untuk tipe data int2, int4, int8, float4, float8, numeric, timestamp dengan zona waktu, timestamp tanpa zona waktu, waktu dengan zona waktu, waktu tanpa zona waktu, tanggal , interval, oid, uang, char, varchar, teks, bytea, bit, varbit, macaddr, inet, dan cidr.

Secara umum, kelas-kelas operator ini tidak akan mengungguli metode indeks B-tree standar yang setara, dan mereka tidak memiliki satu fitur utama dari kode B-tree standar: kemampuan untuk menegakkan keunikan. Namun, mereka menyediakan beberapa fitur lain yang tidak tersedia dengan indeks B-tree, seperti yang dijelaskan di bawah ini. Juga, kelas-kelas operator ini berguna ketika indeks GiST multikolom diperlukan , di mana beberapa kolom adalah tipe data yang hanya dapat diindeks dengan GiST tetapi kolom lainnya hanya tipe data sederhana. Terakhir, kelas-kelas operator ini berguna untuk pengujian GiST dan sebagai dasar untuk mengembangkan kelas-kelas operator GiST lainnya.

(penekanan milikku)

btree_gist adalah bagian dari instalasi PostgreSQL standar (saat ini), jadi, Anda sebenarnya tidak perlu menginstal file apa pun di sistem Anda.

Setelah menginstal ekstensi ini, Anda bisa menjalankan semua petunjuk ini pada bersih instalasi PostgreSQL 9.6.2, tanpa kesalahan:

-- If there is not there, create extension PostGis as well
CREATE EXTENSION IF NOT EXISTS postgis ;

-- Create Schema `portal`
CREATE SCHEMA IF NOT EXISTS portal ;

Dan jalankan semua CREATEpernyataan Anda tanpa kesalahan.

CREATE TABLE portal.inventory
(
  type character varying,
  pid integer,
  size bigint,
  date timestamp without time zone,
  path character varying,
  outline geography(Polygon,4326)
);

CREATE INDEX inventory_compound_idx
  ON portal.inventory
  USING gist
  (outline, pid);

CREATE INDEX inventory_icompound_idx
  ON portal.inventory
  USING gist
  (pid, outline);

CATATAN: Ini juga diperlukan untuk versi 9.2, menurut komentar dari @Erwin Brandstetter. Jadi, kemungkinan besar, jika Anda melakukan dump dari databse versi 9.2, CREATE EXTENSION btree_gist ;pernyataan itu akan muncul.


1
Ya, hal yang sama berlaku untuk hal 9.2.
Erwin Brandstetter

1
Terima kasih @ Joanolo, Untuk beberapa alasan, ketika saya bermigrasi dari 9,2 ke 9,6 melalui cadangan khusus, ia mengingat ekstensi PostGIS tetapi bukan GIST. Menambahkan itu kembali menyelesaikan masalah.
Dr.YSG
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.