选择 打开 改范围 完整检索页
受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10
当前 PostgreSQL 版本不在支持生命周期内。
您可以参阅当前版本的对应页面,或其他在上面列出的活跃大版本。

F.7. btree_gist #

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,以及所有enum类型。

一般来说,这些操作符类的性能不会优于对应的标准 B-树索引方法,而且它们缺少标准 B-树实现的一项主要特性:强制唯一性的能力。不过,正如下文所述,它们提供了一些 B-树索引所不具备的其他特性。另外,当需要多列 GiST 索引,而其中某些列的数据类型只能用 GiST 建立索引、其他列只是简单数据类型时,这些操作符类就很有用。最后,这些操作符类对于 GiST 测试以及作为开发其他 GiST 操作符类的基础也很有用。

除典型的 B-树搜索操作符之外,btree_gist还为<>不等于)提供索引支持。这在与下文描述的排他约束结合使用时可能很有用。

此外,对于那些具有自然距离度量的数据类型,btree_gist定义了距离操作符<->,并为使用该操作符的最近邻搜索提供 GiST 索引支持。为以下类型提供了距离操作符:int2int4int8float4float8timestamp with time zonetimestamp without time zonetime without time zonedateintervaloidmoney

F.7.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.7.2. 作者

Teodor Sigaev()、 Oleg Bartunov()、 Janko Richter()和 Paul Jungwirth()。更多信息见 http://www.sai.msu.su/~megera/postgres/gist/