Postgres系统列记录在Chapter 5. Data Definition > 5.4. System Columns中。
该页面提到oid
值“是32位数量”。这一页对事务标识符也有同样的规定。所以我假设这意味着oid
,tableoid
,xmin
,cmin
,xmax
和cmax
都是32位整数。
但这就留下了ctid
系统列。
行版本在其表中的物理位置。请注意,尽管ctid可以非常快地用于定位行版本,但如果通过真空填充更新或移动行的ctid,则行的ctid将发生变化。因此,ctid作为长期行标识符是无用的。应该使用OID,或者更好的用户定义的序列号来标识逻辑行。
ctid
列的数据类型是什么?
具体来说,我对Postgres10.3版本感兴趣,但如果它已经改变了过去的版本,那将是很好的了解。
发布于 2018-04-15 04:32:01
tid
请参阅手册页,Chapter 8. Data Types > 8.18. Object Identifier Types。它解释了数据类型是特定于Postgres的,称为tid
。
系统使用的最终标识符类型是tid,或元组标识符(行标识符)。这是系统列ctid的数据类型。元组ID是标识其表中行的物理位置的一对(块号、块内元组索引)。
您可能会发现这个类似的问题很有趣:如何将ctid分解为页码和行号?
顺便说一句,如果您对ctid
& tid
这个主题感兴趣,您可能会对Postgres 12的两个新特性感兴趣:(a) 降级为普通列的OID和(b) Postgres 12及更高版本中新的可插拔表存储/访问方法。见罗伯特·哈斯博客、邮报、pg黑客邮件列表中的z堆公告、浙江PG Wiki和安德烈斯·阿纳泽尔( Andres Anarazel )在pgcon'19的youtube视频。
发布于 2022-01-08 02:59:34
CTID是ItemPointer
的另一个名称。它基本上是一个指向存储在页面上的元组的指针。请参阅bufpage.h
源代码中的PostgreSQL头注释。
参考资料:https://www.postgresql.org/docs/14/storage-page-layout.html
https://dba.stackexchange.com/questions/203989
复制相似问题