pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
amstrategies 列的存在是为了标准化跨数据类型的比较。例如,B-树对键施加了严格的从小到大的顺序。由于 PostgreSQL 允许用户定义操作符,PostgreSQL 不能仅凭操作符名称(例如 > 或 <)就判断它是哪一类比较。事实上,某些访问方法根本不施加任何排序。例如,R-树表达一种矩形包含关系,而哈希数据结构只表达基于哈希函数值的按位相似性。PostgreSQL 需要某种一致的方式,来接受查询中的条件、查看操作符,然后判断是否存在可用的索引。这蕴含着 PostgreSQL 需要知道,例如,<= 和 > 操作符划分一个 B-树。PostgreSQL 使用策略来表达操作符与它们可用于扫描索引的方式之间的这些关系。
定义一组新的策略超出了本讨论的范围,但我们将解释 B-树策略如何工作,因为你要添加一个新的 B-树操作符类就需要了解它。在 pg_am 表中,amstrategies 列设置该访问方法所定义的策略数目。对 B-树来说,这个数是 5。这些策略的含义如表 17.2所示。
表 17.2. B-树策略
| 操作 | 索引号 |
|---|---|
| 小于 | 1 |
| 小于等于 | 2 |
| 等于 | 3 |
| 大于等于 | 4 |
| 大于 | 5 |
这个思路是:你需要把与这些策略对应的操作符添加到 pg_amop 关系中(见下文)。访问方法代码可以使用这些策略号(不管数据类型是什么)来弄清如何划分 B-树、计算选择性等等。现在还不用担心添加操作符的细节;只需理解:对 int2、int4、oid 以及 B-树可以操作的所有其他数据类型, 都必须存在一组这样的操作符。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。