Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16

5.5 系统列 #

每个表都有系统隐式定义的几个系统列。因此,这些名称不能用作用户定义列的名称。(请注意,这些限制与名称是否是关键字无关;引用名称不会使你摆脱这些限制。)你实际上不必关心这些列;只要知道它们存在即可。

tableoid #

包含此行的表的 OID。此列对于从分区表(请参阅第 5.11 节)或继承层次结构(请参阅第 5.10 节)中进行选择的查询特别方便,因为如果没有它,就很难判断行来自哪个单独的表。可以将 tableoidpg_classoid 列联接,以获取表名。

xmin #

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

cmin #

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

xmax #

删除事务的身份(事务 ID),或未删除的行版本为零。此列有可能在可见的行版本中不为零。这通常表示删除事务尚未提交,或尝试删除已回滚。

cmax #

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

ctid #

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

事务标识符也是 32 位量。在长期存在的数据库中,事务 ID 有可能环绕。如果采用适当的维护程序,这不是一个致命的问题;有关详细信息,请参阅第 25 章。但是,不应长期依赖事务 ID 的唯一性(超过十亿个事务)。

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