2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不再支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1

第 63 章. 索引访问方法接口定义

本章定义了核心 PostgreSQL 系统与 索引访问方法(负责管理单个索引类型)之间的接口。核心系统对索引的了解仅限于此处规定的内容,因此可以通过编写附加代码来开发全新的索引类型。

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

索引有效地是从某些数据键值到 元组标识符(或TID)的映射,这些元组标识符指向索引父表中的行版本(元组)。TID 由一个块号和一个块内的项号组成(参见 第 66.6 节)。这些信息足以从表中获取一个特定的行版本。索引并不直接感知在 MVCC 下同一个逻辑行可能存在多个版本;对索引而言,每个元组都是一个独立的对它需要有自己的索引条目的对象。因此,对行的更新总是会为该行创建全新的索引条目,即使键值没有改变。(HOT 元组 是对该陈述的一个例外;但索引也不会处理这些。)死元组的索引条目会在死元组本身被回收时(通过 vacuum)被回收。

提交更正

如果您在文档中发现任何不正确的内容、与您对特定功能的实际使用不符的地方,或者需要进一步澄清的地方,请使用 此表单 报告文档问题。