尝试从 PostgreSQL 文档中理解 TID 定义

Fra*_*k59 5 postgresql

我试图了解什么是 TID 以及它是如何工作的。我在文档中找到了TID的2个定义:

1)来自https://www.postgresql.org/docs/11/datatype-oid.html

系统使用的最终标识符类型是tid,或元组标识符(行标识符)。这是系统列 ctid 的数据类型。元组 ID 是一对(块编号、块内的元组索引),用于标识行在其表中的物理位置。

2)来自https://www.postgresql.org/docs/11/storage-page-layout.html

事实上,PostgreSQL 创建的每个指向项目的指针(ItemPointer,也称为 CTID)都由页码和项目标识符的索引组成。

我理解第二个定义,它对我来说很清楚,但我对第一个定义及其使用的术语感到困惑。

block 中的块索引和元组索引是什么?它们如何与页面和第二个定义匹配?

请帮助并澄清哪个定义是正确的以及我应该如何理解第一个定义中的术语。

Lau*_*lbe 9

“页”和“块”在 PostgreSQL 中是同义词,指的是 8KB 数据块,它是所有对象存储的单位。当谈到磁盘存储时,人们倾向于使用术语“块”,而当数据驻留在内存中时,人们倾向于使用术语“页”,但它们是相同的。

所以 a tidof(42,9)表示该项是表或索引的第 43 个 8KB 块中的第 9 个元素(块从 0 开始计数)。