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

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

受支持版本: 16 / 15 / 14
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2
历史版本PostgreSQL 8.3 已于 2013 年 2 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

52.2. 可扩展性 #

GIN 接口具有很高的抽象层次,访问方法实现者只需实现所访问数据类型的语义。 GIN 层本身会处理并发、日志记录以及树结构的搜索。

要让一个 GIN 访问方法工作起来,只需实现四个 用户定义的方法,它们定义了树中键的行为,以及键、被索引值和 可索引查询之间的关系。简言之,GIN 将可扩展性与通用性、代码复用以及清晰的接口结合了起来。

索引操作符类必须为GIN提供的四个方法是:

int compare(Datum a, Datum b)

比较键(不是被索引的值!)并返回一个小于零、等于零或大于零的 整数,用以表示第一个键是小于、等于还是大于第二个键。

Datum *extractValue(Datum inputValue, int32 *nkeys)

给定一个要被索引的值,返回一个键数组。返回键的数量必须存入 *nkeys。

Datum* extractQuery(Datum query, int32 *nkeys, StrategyNumber n)

给定一个待查询的值,返回一个键数组;也就是说, query 是一个可索引操作符右侧的值,而该操作符 左侧是被索引列。n 是该操作符在操作符类中的 策略号(见 第 34.14.2 节)。通常, extractQuery 需要查看 n,以确定 query 的数据类型,以及需要提取的键值。返回键的 数量必须存入 *nkeys。如果键的数量为零, extractQuery 应向 *nkeys 存入 0 或 -1。0 表示任意行都匹配 query,应采用顺序扫描。-1 表示没有任何东西能满足query。 取值选择应基于给定策略号下操作的语义含义。

bool consistent(bool check[], StrategyNumber n, Datum query)

如果被索引值满足带有策略号 n 的查询操作符(如果该操作符 在操作符类中被标记为 RECHECK,则是可能满足),则返回 TRUE。 check 数组的长度与 extractQuery 此前为此查询返回的键 数量相同。如果被索引值包含相应的查询键,则 check 数组的对应元素为 TRUE,也就是说,如果 (check[i] == TRUE),则 extractQuery 结果数组的第 i 个键出现在被索引值中。 原始的 query 值(不是提取出的键数组!)也会被传入, 以防 consistent 方法需要查看它。

提交更正

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