支持的版本: 当前 (17) / 16 / 15 / 14 / 13
开发版本: 开发版
不支持的版本: 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 节)中选择的查询特别方便,因为如果没有它,很难分辨出某一行来自哪个表。tableoid 可以与 pg_classoid 列连接以获取表名。

xmin #

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

cmin #

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

xmax #

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

cmax #

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

ctid #

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

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

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

提交更正

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