本章定义了核心 PostgreSQL 系统与 索引访问方法 之间的接口,索引访问方法管理各个索引类型。核心系统对索引的了解仅限于此处指定的范围,因此可以通过编写附加代码来开发全新的索引类型。
所有 PostgreSQL 中的索引在技术上被称为 辅助索引;也就是说,索引在物理上与它所描述的表文件是分开的。每个索引都存储为它自己的物理 关系,因此在 pg_class
目录中由一个条目描述。索引的内容完全由其索引访问方法控制。在实践中,所有索引访问方法都将索引划分为标准大小的页面,以便它们可以使用常规的存储管理器和缓冲区管理器来访问索引内容。(所有现有的索引访问方法还使用 第 65.6 节 中描述的标准页面布局,大多数使用相同的格式来表示索引元组头;但这些决定不会强加于访问方法。)
索引实际上是将一些数据键值映射到 元组标识符,或者TID,索引父表的行版本(元组)。TID 包含一个块号和该块中的一个项目号(参见 第 65.6 节)。这足以从表中获取特定行版本。索引并不知道在 MVCC 下,同一逻辑行可能有多个现存版本;对于索引而言,每个元组都是一个独立的对象,需要它自己的索引条目。因此,更新行总是为该行创建全新的索引条目,即使键值没有改变。(HOT 元组 是此语句的例外;但索引也不会处理这些元组。)当死元组本身被回收时,死元组的索引条目也会被回收(通过 vacuuming)。
如果您在文档中发现任何不正确的内容,与您对特定功能的体验不符,或者需要进一步澄清,请使用 此表单 报告文档问题。