PostgreSQL / PostGIS 9.6 đã phá vỡ chỉ số ghép của tôi


8

Trong PostgreSQL 9.2, tôi không gặp vấn đề gì khi tạo chỉ mục có cả loại địa lý (postGIS) và số nguyên dưới dạng chỉ mục ghép. Nhưng bây giờ (9.6) nó phàn nàn về việc tạo chỉ mục và tôi không hiểu gợi ý mà nó đang cung cấp:

Các cột và dữ liệu đều được tạo đúng, Postgres đang phàn nàn về chỉ mục tạo.

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.

Định nghĩa lược đồ như sau:

- 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);

Câu trả lời:


8

Bạn cần cài đặt một cụ thể EXTENSIONtrong cơ sở dữ liệu của bạn:

CREATE EXTENSION btree_gist ;

Theo tài liệu của PostgreSQL trên btree_gist :

btree_gist cung cấp các lớp toán tử chỉ mục GiST thực hiện hành vi tương đương cây B cho các kiểu dữ liệu int2, int4, int8, float4, float8, số, dấu thời gian với múi giờ, dấu thời gian không có múi giờ, thời gian với múi giờ, múi giờ, múi giờ , khoảng, oid, tiền, char, varchar, văn bản, bytea, bit, varbit, macaddr, inet, và cidr.

Nhìn chung, các lớp toán tử này sẽ không vượt trội so với các phương thức chỉ mục cây B tiêu chuẩn tương đương và chúng thiếu một tính năng chính của mã cây B tiêu chuẩn: khả năng thực thi tính duy nhất. Tuy nhiên, họ cung cấp một số tính năng khác không có sẵn với chỉ mục cây B, như được mô tả dưới đây. Ngoài ra, các lớp toán tử này rất hữu ích khi cần chỉ mục GiST nhiều màu , trong đó một số cột có kiểu dữ liệu chỉ có thể lập chỉ mục với GiST nhưng các cột khác chỉ là kiểu dữ liệu đơn giản. Cuối cùng, các lớp toán tử này rất hữu ích cho thử nghiệm GiST và là cơ sở để phát triển các lớp toán tử GiST khác.

(nhấn mạnh của tôi)

btree_gist là một phần của bản cài đặt PostgreSQL tiêu chuẩn (hiện tại), vì vậy, bạn thực sự không cần phải cài đặt bất kỳ tệp nào trong hệ thống của mình.

Sau khi cài đặt tiện ích mở rộng này, bạn có thể thực hiện tất cả các hướng dẫn này trên bản cài đặt sạch PostgreSQL 9.6.2 mà không gặp trục trặc:

-- 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 ;

Và thực hiện tất cả các CREATEbáo cáo của bạn mà không có trục trặc.

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);

LƯU Ý: Điều này cũng cần thiết cho phiên bản 9.2, theo nhận xét từ @Erwin Brandstetter. Vì vậy, rất có thể, nếu bạn tạo một kết xuất của cơ sở dữ liệu phiên bản 9.2, CREATE EXTENSION btree_gist ;câu lệnh sẽ xuất hiện.


1
Có, áp dụng tương tự cho pg 9.2.
Erwin Brandstetter

1
Cảm ơn bạn @joanolo, vì một số lý do, khi tôi di chuyển từ 9.2 đến 9.6 thông qua một bản sao lưu tùy chỉnh, nó đã nhớ các tiện ích mở rộng PostGIS nhưng không phải là GIST. Thêm vào đó đã giải quyết vấn đề.
Dr.YSG
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.