pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
与操作符类关联的操作符通过“策略号”来标识,用以表示每个操作符在其操作符类上下文中的语义。例如,B-树对键施加了严格的从小到大的顺序,因此像“小于”和“大于等于”这样的操作符,对 B-树来说就很重要。由于 PostgreSQL 允许用户定义操作符,PostgreSQL 不能仅凭操作符名称(例如 < 或 >=)就判断它是哪一类比较。取而代之的是,索引访问方法定义了一组“策略”,可以把它们看成是广义的操作符。每个操作符类都会说明,对于某种特定数据类型和某种索引语义解释,每一种策略分别对应哪个实际操作符。
B-树索引定义了 5 种策略,如表 14.1所示。
表 14.1. B-树策略
| 操作 | 策略号 |
|---|---|
| 小于 | 1 |
| 小于等于 | 2 |
| 等于 | 3 |
| 大于等于 | 4 |
| 大于 | 5 |
哈希索引只表达按位相似性,因此它们只定义 1 种策略,如表 14.2所示。
表 14.2. 哈希策略
| 操作 | 策略号 |
|---|---|
| 等于 | 1 |
R-树索引表达矩形包含关系。它们定义 8 种策略,如表 14.3所示。
表 14.3. R-树策略
| 操作 | 策略号 |
|---|---|
| 位于左侧 | 1 |
| 位于左侧或重叠 | 2 |
| 重叠 | 3 |
| 位于右侧或重叠 | 4 |
| 位于右侧 | 5 |
| 相同 | 6 |
| 包含 | 7 |
| 被包含 | 8 |
GiST 索引更加灵活:它们根本没有固定的策略集合。相反,某个特定 GiST 操作符类的“一致性”支持例程会按自己的方式解释策略号。
顺便说一下,pg_am 中的 amorderstrategy 列表明访问方法是否支持有序扫描。 零表示不支持;如果支持,amorderstrategy 就是与排序操作符对应的策略号。例如,B-树的 amorderstrategy = 1,即它的“小于”策略号。
简而言之,一个操作符类必须指定一组操作符,为该操作符类的数据类型表达上述每一种语义概念。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。