Postgresql
Postgres 中“ctid”系統列的數據類型是什麼?
Postgres 系統列在第 5 章中記錄。數據定義 > 5.4。系統列。
該頁面提到
oid
值“是 32 位數量”。該頁面對交易標識符也有同樣的看法。所以我假設這意味著oid
,tableoid
,xmin
,cmin
,xmax
和cmax
都是 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 Wiki和pgcon'19 中的 Andres Anarazel youtube 影片。