为什么 Postgres 对多个表中的不同行返回相同的 ctid 值?

问题描述 投票:0回答:1

我对 ctid 的理解是,它通过给出 page_id 和存储特定行/元组的页面中的偏移量来返回磁盘上行的物理位置。但是当尝试获取不同表的 ctid 时,我得到相同的 ctid。所以我真的很困惑 ctid 到底返回什么?它不可能是磁盘上的“实际”物理位置,因为磁盘上的给定位置只能有一行。下面附上两张不同 postgres 表中 5 行的 ctid 值的图片:

database postgresql rdbms
1个回答
0
投票

你几乎是正确的 - 这不是元组的绝对位置,而是它在表中的位置:

ctid
行版本在其表中的物理位置。请注意,虽然 ctid 可用于非常快速地定位行版本,但如果行被 VACUUM FULL 更新或移动,其 ctid 将会更改。因此 ctid 作为长期行标识符是没有用的。应使用主键来标识逻辑行。

© www.soinside.com 2019 - 2024. All rights reserved.