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