btree_gist
为数据类型 int2
、int4
、int8
、float4
、float8
、numeric
、timestamp with time zone
、timestamp without time zone
、time with time zone
、time without time zone
、date
、interval
、oid
、money
、char
、varchar
、text
、bytea
、bit
、varbit
、macaddr
、macaddr8
、inet
、cidr
、uuid
、bool
和所有 enum
类型提供实现 B 树等效行为的 GiST 索引操作符类。
一般来说,这些操作符类不会优于等效的标准 B 树索引方法,并且它们缺少标准 B 树代码的一个主要特性:强制唯一性的能力。但是,它们提供了一些 B 树索引不可用的其他特性,如下所述。此外,当需要多列 GiST 索引时,这些操作符类非常有用,其中某些列是只能使用 GiST 索引的数据类型,而其他列只是简单的数据类型。最后,这些操作符类对于 GiST 测试以及作为开发其他 GiST 操作符类的基础非常有用。
除了典型的 B 树搜索操作符之外,btree_gist
还为 <>
(“不等于”)提供了索引支持。这可能与排除约束结合使用,如下所述。
此外,对于具有自然距离度量的数据类型,btree_gist
定义了一个距离操作符 <->
,并为使用此操作符的最近邻搜索提供 GiST 索引支持。为 int2
、int4
、int8
、float4
、float8
、timestamp with time zone
、timestamp without time zone
、time without time zone
、date
、interval
、oid
和 money
提供了距离操作符。
此模块被认为是“受信任的”,也就是说,具有当前数据库 CREATE
权限的非超级用户可以安装它。
使用 btree_gist
而不是 btree
的简单示例
CREATE TABLE test (a int4); -- create index CREATE INDEX testidx ON test USING GIST (a); -- query SELECT * FROM test WHERE a < 10; -- nearest-neighbor search: find the ten entries closest to "42" SELECT *, a <-> 42 AS dist FROM test ORDER BY a <-> 42 LIMIT 10;
使用排除约束强制执行动物园的笼子只能包含一种动物的规则
=> CREATE TABLE zoo ( cage INTEGER, animal TEXT, EXCLUDE USING GIST (cage WITH =, animal WITH <>) ); => INSERT INTO zoo VALUES(123, 'zebra'); INSERT 0 1 => INSERT INTO zoo VALUES(123, 'zebra'); INSERT 0 1 => INSERT INTO zoo VALUES(123, 'lion'); ERROR: conflicting key value violates exclusion constraint "zoo_cage_animal_excl" DETAIL: Key (cage, animal)=(123, lion) conflicts with existing key (cage, animal)=(123, zebra). => INSERT INTO zoo VALUES(124, 'lion'); INSERT 0 1
Teodor Sigaev(<[email protected]>
),Oleg Bartunov(<[email protected]>
),Janko Richter(<[email protected]>
),以及 Paul Jungwirth(<[email protected]>
)。有关其他信息,请参阅http://www.sai.msu.su/~megera/postgres/gist/。
如果您发现文档中有任何不正确、与您使用特定功能的经验不符或需要进一步澄清的地方,请使用此表单报告文档问题。