Chapter 60.索引访问方法接口定义

目录

本章定义了核心 PostgreSQL 系统和索引访问方法之间的接口,后者 Management 各个索引类型。除了此处指定的内容外,核心系统对索引一无所知,因此可以通过编写附加代码来开发全新的索引类型。

PostgreSQL 中的所有索引在技术上都称为“二级索引”;也就是说,索引在物理上与其描述的表文件是分开的。每个索引都存储为自己的物理“关系”,因此由pg_class目录中的条目描述。索引的内容完全受其索引访问方法的控制。实际上,所有索引访问方法都将索引分为标准大小的页面,以便它们可以使用常规存储 Management 器和缓冲区 Management 器来访问索引内容。 (此外,所有现有的索引访问方法还使用Section 66.6中描述的标准页面布局,并且大多数对索引 TuplesHeaders 使用相同的格式;但是这些决定不是强制执行的。)

索引实际上是从某些数据键值到索引的父表中行版本(Tuples)的“Tuples 标识符”(即 TID)的 Map。 TID 由一个块号和该块内的项目号组成(请参阅Section 66.6)。这是足够的信息,可以从表中获取特定的行版本。索引不是直接意识到在 MVCC 下,同一逻辑行可能存在多个现存版本;对于一个索引,每个 Tuples 都是一个独立的对象,需要它自己的索引条目。因此,即使键值未更改,对行的更新也会始终为该行创建全新的索引条目。 (HOTTuples 是该语句的 exception;但是索引也不处理那些.)当回收死 Tuples 本身时,将回收死 Tuples 的索引条目(通过清理)。