↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 7.3
历史版本PostgreSQL 7.3 已于 2007 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

14.7. 操作符类的特殊特性 #

还有两个操作符类的特殊特性我们尚未讨论,主要是因为它们对默认的 B-树索引访问方法没有多大用处。

通常,把一个操作符声明为操作符类的成员,意味着 索引访问方法能够正好检索出满足使用该操作符的 WHERE 条件的行集。例如:

SELECT * FROM table WHERE integer_column < 4;

可以由整数列上的 B-树索引精确满足。但也存在这样的情况:索引 只是查找匹配行的不精确向导。例如,如果一个 R-树索引只存储 对象的包围盒,那么它就无法精确满足测试多边形 等非矩形对象之间重叠的 WHERE 条件。不过,我们可以用 索引找出包围盒与目标对象的包围盒重叠的对象,然后只对索引找到的 对象做精确的重叠测试。如果适用这种情形,就称该索引对该操作符是 “有损”的,此时我们在 CREATE OPERATOR CLASS 命令的 OPERATOR 子句中加上 RECHECK。 如果索引保证返回所有需要的元组(可能还外加一些额外的元组,它们可以通过 执行原始操作符比较来排除),RECHECK 就是合法的。

再次考虑只在索引中存储多边形等复杂对象的包围盒的情况。此时,在索引条目中存储整个多边形没有多少价值,不如只存储一个更简单的对象,其类型为box。这种情况由STORAGE选项表达,该选项位于CREATE OPERATOR CLASS:可以写成如下形式:

CREATE OPERATOR CLASS polygon_ops
    DEFAULT FOR TYPE polygon USING gist AS
        ...
        STORAGE box;

目前,只有 GiST 访问方法支持与列数据类型不同的STORAGE类型。GiST 的compress和decompress支持例程在使用STORAGE时必须处理数据类型转换。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。