Skip to content

F.9. btree_gist — 带 B 树行为的 GiST 运算符类#

F.9.1. 使用示例
F.9.2. 作者

btree_gist提供 GiST 索引运算符类,为数据类型int2int4int8float4float8numerictimestamp with time zonetimestamp without time zonetime with time zonetime without time zonedateintervaloidmoneycharvarchartextbyteabitvarbitmacaddrmacaddr8inetcidruuidbool和所有enum类型实现 B 树等效行为。

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

除了典型的 B 树搜索运算符之外,btree_gist还为<>(“不等于”)提供索引支持。这可能与排除约束结合使用,如下所述。

此外,对于具有自然距离度量的类型,btree_gist定义了一个距离运算符<->,并为使用此运算符的最近邻搜索提供 GiST 索引支持。为int2int4int8float4float8timestamp with time zonetimestamp without time zonetime without time zonedateintervaloidmoney提供距离运算符。

此模块被认为是“受信任的”,也就是说,它可以由在当前数据库上具有CREATE权限的非超级用户安装。

F.9.1. 示例用法#

使用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

F.9.2. 作者#

Teodor Sigaev (<[[email protected]](/cdn-cgi/l/email-protection#1266777d767d605261667371793c7c7766)>),Oleg Bartunov (<[[email protected]](/cdn-cgi/l/email-protection#4b24272e2c0b382a226526383e65383e)>),Janko Richter (<[[email protected]](/cdn-cgi/l/email-protection#8ee4efe0e5e1fce7ede6faebfccef7efe6e1e1a0eaeb)>),和 Paul Jungwirth (<[[email protected]](/cdn-cgi/l/email-protection#324258725b5e5e475f5b5c53465756515d5f4247465b5c551c515d5f)>)。有关更多信息,请参阅http://www.sai.msu.su/~megera/postgres/gist/