btree_gist

用GiST索引常见数据类型

概览

扩展包名版本分类许可证语言
btree_gist1.7FUNCPostgreSQLC
ID扩展名BinLibLoadCreateTrustReloc模式
4940btree_gist-
相关扩展btree_gin unaccent fuzzystrmatch pg_trgm prefix citext
下游依赖emaj omni_auth periods pgautofailover powa

版本

PG18PG17PG16PG15PG14
1.71.71.71.71.7

安装

提示:这是 PostgreSQL 内核自带的 contrib 扩展

CREATE EXTENSION btree_gist;

用法

btree_gist: B 树等价的 GiST 操作符类

为通常仅支持 B 树索引的数据类型提供 GiST 索引操作符类。支持将等值运算与范围运算结合使用的排除约束。

CREATE EXTENSION btree_gist;

支持的数据类型

int2int4int8float4float8numerictimestamp with time zonetimestamp without time zonetime with time zonetime without time zonedateintervaloidmoneycharvarchartextbyteabitvarbitmacaddrmacaddr8inetcidruuidbool 以及所有 enum 类型。

距离运算符

为数值和时间类型提供 <-> 运算符,用于最近邻搜索。

示例

-- 整数列上的 GiST 索引
CREATE INDEX idx ON test USING GIST (a);
SELECT * FROM test WHERE a < 10;

-- 最近邻搜索
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 (1, 'lion');    -- OK
INSERT INTO zoo VALUES (1, 'tiger');   -- ERROR: 冲突的键值
INSERT INTO zoo VALUES (2, 'tiger');   -- OK

-- 每个房间不重叠时间范围的排除约束
CREATE TABLE reservations (
  room int,
  during tsrange,
  EXCLUDE USING GIST (room WITH =, during WITH &&)
);

最后修改 2026-03-12: update extension pages (f579993)