在 PostgreSQL 9.2 中,我可以毫无问题地创建一个同时具有地理 (postGIS) 类型和整数作为复合索引的索引。但是现在(9.6)它抱怨索引的创建,我不明白它提供的提示:
列和数据都已正确创建,Postgres 抱怨创建索引。
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.
架构定义如下:
- 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);
您需要在数据库中安装特定
EXTENSION
的:根据btree_gist 上的 PostgreSQL 文档:
(强调我的)
btree_gist
是标准(当前)PostgreSQL 安装的一部分,因此,您实际上不需要在系统中安装任何文件。安装此扩展后,您可以在全新安装的 PostgreSQL 9.6.2上执行所有这些说明,而不会出现故障:
CREATE
并毫无故障地执行所有语句。注意:根据@Erwin Brandstetter 的评论,这也是 9.2 版所需要的。所以,最有可能的是,如果您对9.2 版数据库进行转储
CREATE EXTENSION btree_gist ;
,则应该会出现该语句。