每个表都有几个由系统隐式定义的系统列。因此,这些名称不能用作用户定义的列名。(请注意,这些限制与该名称是否为关键字无关;引用名称也不能逃避这些限制。)您实际上不需要关心这些列;只需知道它们存在即可。
tableoid
#包含此行的表的 OID。此列对于选择来自分区表(请参阅 第 5.12 节)或继承层次结构(请参阅 第 5.11 节)的查询特别有用,因为如果没有它,很难知道一行来自哪个单独的表。可以 tableoid
与 oid
列 pg_class
进行联接以获取表名。
xmin
#此行版本的插入事务的标识(事务 ID)。(行版本是行的单个状态;行的每次更新都会为同一逻辑行创建新的行版本。)
cmin
#插入事务中的命令标识(从零开始)。
xmax
#删除事务的标识(事务 ID),对于未删除的行版本为零。可见的行版本中此列可能为非零。这通常表示删除事务尚未提交,或者尝试的删除已被回滚。
cmax
#删除事务中的命令标识,或零。
ctid
#行版本在表中的物理位置。请注意,尽管 ctid
可用于非常快速地定位行版本,但如果行被更新或由 VACUUM FULL
移动,其 ctid
将会更改。因此 ctid
作为长期行标识符是无用的。应使用主键来标识逻辑行。
事务标识符也是 32 位数量。在长期运行的数据库中,事务 ID 可能会发生回绕。在有适当的维护程序的情况下,这不是一个致命问题;有关详细信息,请参阅 第 24 章。但是,不建议在长期(超过十亿次事务)依赖事务 ID 的唯一性。
命令标识符也是 32 位数量。这在单个事务中创建了 232(40 亿)个命令的硬性限制。SQL命令的限制,而不是处理的行的数量。此外,只有那些实际修改数据库内容的命令才会消耗命令标识符。SQL命令,而不是处理的行的数量。此外,只有那些实际修改数据库内容的命令才会消耗命令标识符。
如果您在文档中发现任何不正确、与您使用该特定功能时的经验不符或需要进一步澄清的内容,请使用 此表单 报告文档问题。