# 5.5.系统列
每张桌子都有几张系统列由系统隐式定义的。因此,这些名称不能用作用户定义列的名称。(请注意,这些限制与名称是否为关键字无关;引用名称将不允许您逃避这些限制。)你真的不需要担心这些专栏;只要知道它们的存在。
包含此行的表的OID。此列对于从分区表中进行选择的查询特别方便(请参见第5.11节)或继承层次结构(请参见第5.10节),因为没有它,很难分辨一行来自哪个表。这个片状
可以联合起来对抗老年人
一栏pg_类
以获取表名。
此行版本的插入事务的标识(事务ID)。(行版本是行的单个状态;行的每次更新都会为同一逻辑行创建一个新的行版本。)
插入事务中的命令标识符(从零开始)。
删除事务的标识(事务ID),对于未删除的行版本,为零。在可见行版本中,此列可能不为零。这通常表示删除事务尚未提交,或者尝试的删除已回滚。
删除事务中的命令标识符,或零。
行版本在其表中的物理位置。请注意,虽然ctid
可用于快速定位行版本,一行的ctid
将在更新或移动时更改真空满
因此ctid
作为长期行标识符是无用的。应该使用主键来标识逻辑行。
事务标识符也是32位的量。在一个长期存在的数据库中,事务ID是可以环绕的。考虑到适当的维护程序,这不是致命问题;看见第25章详细信息。然而,长期依赖事务ID的唯一性(超过10亿个事务)是不明智的。
命令标识符也是32位的量。这将创建一个2的硬限制32(40亿)个SQL命令在一个事务中执行。实际上,这个限制不是问题——请注意,限制是SQL命令的数量,而不是处理的行数。此外,只有实际修改数据库内容的命令才会使用命令标识符。