首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Postgres中“ctid”系统列的数据类型是什么?

Postgres中“ctid”系统列的数据类型是什么?
EN

Database Administration用户
提问于 2018-04-15 04:26:18
回答 2查看 20.5K关注 0票数 22

Postgres系统列记录在Chapter 5. Data Definition > 5.4. System Columns中。

该页面提到oid值“是32位数量”。这一页对事务标识符也有同样的规定。所以我假设这意味着oidtableoidxmincminxmaxcmax都是32位整数。

但这就留下了ctid系统列。

行版本在其表中的物理位置。请注意,尽管ctid可以非常快地用于定位行版本,但如果通过真空填充更新或移动行的ctid,则行的ctid将发生变化。因此,ctid作为长期行标识符是无用的。应该使用OID,或者更好的用户定义的序列号来标识逻辑行。

ctid列的数据类型是什么?

具体来说,我对Postgres10.3版本感兴趣,但如果它已经改变了过去的版本,那将是很好的了解。

EN

回答 2

Database Administration用户

回答已采纳

发布于 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视频

票数 20
EN

Database Administration用户

发布于 2022-01-08 02:59:34

CTID是ItemPointer的另一个名称。它基本上是一个指向存储在页面上的元组的指针。请参阅bufpage.h源代码中的PostgreSQL头注释。

参考资料:https://www.postgresql.org/docs/14/storage-page-layout.html

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/203989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档