btree_gist
提供了 GiST 索引运算符类,这些类为以下数据类型实现了等效于 B 树的行为: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 树索引方法,并且它们缺少标准 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/。
如果您在文档中发现任何不正确的内容、与您对特定功能的体验不符的内容或需要进一步说明的内容,请使用 此表单 报告文档问题。