2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3

F.8. btree_gist — 具有 B-tree 行为的 GiST 算子类 #

btree_gist 提供了 GiST 索引算子类,这些类为数据类型 int2int4int8float4float8numerictimestamp with time zonetimestamp without time zonetime with time zonetime without time zonedateintervaloidmoneycharvarchartextbyteabitvarbitmacaddrmacaddr8inetcidruuidbool 以及所有 enum 类型实现了等同于 B-tree 的行为。

总的来说,这些算子类的性能不会超过等效的标准 B-tree 索引方法,并且它们缺少标准 B-tree 代码的一项主要功能:强制唯一性的能力。但是,它们提供了一些 B-tree 索引所不具备的其他功能,如下所述。此外,当需要多列 GiST 索引时,这些算子类会很有用,其中一些列是只能用 GiST 索引的数据类型,而其他列只是简单的数据类型。最后,这些算子类对于 GiST 测试以及作为开发其他 GiST 算子类的方法很有用。

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

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

默认情况下,btree_gist 构建GiST索引时处于 已排序 模式下的 sortsupport。这通常会大大加快索引构建速度。通过在创建索引时使用 buffering 参数,仍然可以恢复到缓冲构建策略。

此模块被认为是受信任的,这意味着非超级用户也可以在其拥有的数据库上安装它,前提是他们具有 CREATE 权限。

F.8.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.8.2. 作者 #

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

提交更正

如果您在文档中发现任何不正确之处、与您对特定功能的体验不符之处或需要进一步澄清之处,请使用 此表格 报告文档问题。