2024 年 9 月 26 日:PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不支持的版本:11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3

5.6 系统列 #

每个表都包含一些由系统隐式定义的系统列。因此,这些名称不能用作用户定义列的名称。(请注意,这些限制与名称是否为关键字是分开的;引用名称并不能绕过这些限制。)您实际上不必关心这些列;只需知道它们存在即可。

tableoid #

包含该行的表的 OID。该列对于从分区表(请参阅第 5.12 节)或继承层次结构(请参阅第 5.11 节)中选择数据特别有用,因为没有它,很难确定行来自哪个单独的表。tableoid 可以与 pg_classoid 列连接以获得表名。

xmin #

为该行版本插入事务的标识(事务 ID)。(行版本是行的单个状态;每次更新行都会为同一逻辑行创建新的行版本。)

cmin #

插入事务中的命令标识符(从零开始)。

xmax #

删除事务的标识(事务 ID),或者对于未删除的行版本为零。该列在可见行版本中可能是非零值。通常表示删除事务尚未提交,或尝试删除操作已被回滚。

cmax #

删除事务中的命令标识符,或者为零。

ctid #

行版本在其表中的物理位置。请注意,尽管ctid 可以用来快速定位行版本,但如果行被更新或通过VACUUM FULL移动,则行的ctid 会更改。因此,ctid 作为长期行标识符毫无用处。应使用主键来标识逻辑行。

事务标识符也是 32 位数量。在长期运行的数据库中,事务 ID 可能循环。这在适当的维护程序下不是一个致命问题;有关详细信息,请参阅第 24 章。然而,在长期(超过十亿次事务)依赖事务 ID 的唯一性是不明智的。

命令标识符也是 32 位数量。这会在单个事务中创建 232(40 亿)的硬性限制。SQL命令在单个事务中。SQL实际上,此限制不是问题——请注意,限制是命令数,而不是处理的行数。此外,只有实际修改数据库内容的命令才会消耗命令标识符。

提交更正

如果您在文档中看到任何不正确的内容、与特定功能的经验不符或需要进一步阐明的内容,请使用此表单报告文档问题。