PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 附录 F. 额外提供的模块 | 下一页

# F.5. btree_gist

`btree_gist`提供 GiST索引操作符类实现数据类型`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`, `inet`和`cidr` B-tree等价操作。

总的来说，这些操作符类不会超过等值标准的B树索引方法， 他们缺乏标准B树代码的一个主要特点：强制唯一性的能力。然而， 它们提供一些不可用于B树索引的其他功能，正如下面描述的。 另外当需要多列GiST索引时， 这些操作符类是有用的， 其中一些列是唯一可以使用GiST可索引的数据类型 但是其他列仅仅是简单的数据类型。 最终，这些操作符类对GiST测试是有用的， 并且作为开发其他GiST操作符类的基础。

除了典型的B树搜索操作符，`btree_gist` 还提供索引支持`<>` ("不等")。 这可能在与 exclusion constraint结合中很用， 正如下面描述。

另外，对于数据类型是一种天然的距离度量， `btree_gist`定义了一个距离操作符`<->`, 并且使用该操作符为最近相邻搜索提供GiST索引支持。 为`int2`, `int4`, `int8`, `float4`, `float8`, `timestamp with time zone`, `timestamp without time zone`, `time without time zone`, `date`, `interval`, `oid`和`money`提供距离操作符。

## F.5.1. 例子用法

使用`btree_gist`而不是`btree`的简单例子：

    CREATE TABLE test (a int4);
    -- 创建索引
    CREATE INDEX testidx ON test USING gist (a);
    -- 查询
    SELECT * FROM test WHERE a < 10;
    -- 最近相邻搜索：找到最接近"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.5.2. 作者

Teodor Sigaev (`<teodor@stack.net>`), Oleg Bartunov (`<oleg@sai.msu.su>`)和 Janko Richter (`<jankorichter@yahoo.de>`)。参阅 http://www.sai.msu.su/~megera/postgres/gist/ 获取额外信息。

上一页 | 起始页 | 下一页
btree_gin | 上一级 | chkpass