# F.7.B树_主旨

F.7.1.示例用法F.7.2.作者

btree_gist提供GiST索引运算符类,这些类实现数据类型的B树等效行为int2,int4,int8,浮动4,浮动8,数字的,带时区的时间戳,不带时区的时间戳,带时区的时间,没有时区的时间, 日期, 间隔, 老年人, , 烧焦, 瓦尔查尔, 文本, 二进制数据, 一点, 瓦比特, 马卡德尔, macaddr8, 内特, 苹果酒, 乌伊德,等等枚举类型。

一般来说,这些运算符类的性能不会超过等效的标准B树索引方法,而且它们缺少标准B树代码的一个主要特性:强制唯一性的能力。但是,它们还提供了一些B树索引无法提供的其他功能,如下所述。此外,当需要多列GiST索引时,这些运算符类也很有用,其中一些列的数据类型只能用GiST索引,而其他列只是简单的数据类型。最后,这些操作符类对于GiST测试非常有用,并且可以作为开发其他GiST操作符类的基础。

除了典型的B-树搜索操作符,btree_gist还为<>(“不平等”)。这可能与排除约束,如下所述。

此外,对于具有自然距离度量的数据类型,btree_gist定义距离运算符<->,并使用此运算符为最近邻搜索提供GiST索引支持。为用户提供了距离操作符int2, int4, int8, 浮动4, 浮动8, 带时区的时间戳, 不带时区的时间戳, 没有时区的时间, 日期, 间隔, 老年人.

该模块被认为是“受信任的”,也就是说,它可以由拥有创造当前数据库的权限。

# F.7.1.示例用法

使用btree_gist而不是B树:

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

# F.7.2.作者

特奥多尔·西加耶夫(<[teodor@stack.net](邮寄至:teodor@stack.net)>),奥列格·巴图诺夫(<[oleg@sai.msu.su](邮寄至:oleg@sai.msu.su)>)詹科·里克特(<[jankorichter@yahoo.de](邮寄至:jankorichter@yahoo.de)>)和保罗·荣沃思(<[pj@illuminatedcomputing.com](邮寄至:pj@illuminatedcomputing.com)>).看到了吗http://www.sai.msu.su/~梅格拉/博士后/吉斯特/ (opens new window)了解更多信息。