Postgresql

Postgres 中“ctid”系統列的數據類型是什麼?

  • January 8, 2022

Postgres 系統列在第 5 章中記錄。數據定義 > 5.4。系統列

該頁面提到oid值“是 32 位數量”。該頁面對交易標識符也有同樣的看法。所以我假設這意味著oid, tableoid, xmin, cmin,xmaxcmax都是 32 位整數。

但這留下了ctid系統列。

行版本在其表中的物理位置。請注意,儘管 ctid 可用於非常快速地定位行版本,但如果行的 ctid 被 VACUUM FULL 更新或移動,它會發生變化。因此 ctid 作為長期行標識符是無用的。OID,或者更好的使用者定義的序列號,應該用於辨識邏輯行。

➡ 列的數據類型是ctid什麼?

具體來說,我對 Postgres 10.3 版本感興趣,但如果它在過去的版本中發生了變化,那將是很高興知道的。

tid

請參閱手冊頁,第 8 章。數據類型 > 8.18。對象標識符類型。它解釋說數據類型是 Postgres 特定的,稱為tid.

系統使用的最終標識符類型是 tid,或元組標識符(行標識符)。這是系統列 ctid 的數據類型。元組 ID 是一對(塊編號,塊內的元組索引),用於標識行在其表中的物理位置。

您可能會發現這個類似的問題很有趣:如何將 ctid 分解為頁碼和行號?

順便說一句,如果您對ctid&的這個話題感興趣tid,您可能會對 Postgres 12 的兩個新特性感興趣:(a) OID 降級為普通列,以及 (b) 可插入的表儲存/訪問方法特性Postgres 12 及更高版本。請參閱Robert Haas 部落格Michael Paquier 文章pg 黑客郵件列表中的 zheap 公告Zheap PG Wikipgcon'19 中的 Andres Anarazel youtube 影片

引用自:https://dba.stackexchange.com/questions/203989