2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 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 节)的查询特别有用,因为如果没有它,很难知道一行来自哪个单独的表。可以 tableoidoidpg_class 进行联接以获取表名。

xmin #

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

cmin #

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

xmax #

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

cmax #

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

ctid #

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

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

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

提交更正

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