↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 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
历史版本。 PostgreSQL 13 已结束支持。 2025-11-13. 请参阅 当前版本手册.

5.5. 系统列 #

每个表都有几个由系统隐式定义的系统列。因此,这些名称不能用作用户定义列的名称。(注意,这些限制与名称是否为关键字无关;给名称加引号也不能绕过这些限制。)你其实不必关心这些列的细节,只需要知道它们存在即可。

tableoid

包含该行的表的 OID。对于从继承层次(见第 5.10 节)中查询数据的场景,这一列尤其方便,因为如果没有它,就很难判断一行究竟来自哪个具体表。tableoid 可以与 pg_class 的 oid 列连接,以取得表名。

xmin

插入该行版本的事务 ID。(行版本是某一行的一个具体状态;对同一逻辑行的每次更新都会创建一个新的行版本。)

cmin

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

xmax

删除事务的标识(事务 ID);对于未删除的行版本则为 0。对于一个可见的行版本,该列也可能是非零值。这通常表示删除事务尚未提交,或者一次删除尝试被回滚了。

cmax

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

ctid

行版本在其表中的物理位置。注意尽管 ctid 可以被用来非常快速地定位行版本,但是一个行的 ctid 会在被更新或者被 VACUUM FULL 移动时改变。因此,不应将 ctid 用作行标识符。应使用主键来标识逻辑行。

事务 ID 也是 32 位的量。在一个长期运行的数据库中,事务 ID 可能会回卷。只要采取适当的维护措施,这并不是致命问题,详见第 24 章。不过,从长期来看(超过十亿个事务)依赖事务 ID 的唯一性是不明智的。

命令标识符也是 32 位的量。这为单个事务中的 SQL 命令数设置了一个硬上限:232(40 亿)。在实践中,这个限制并不是问题 — 注意,这里限制的是 SQL 命令的数量,而不是处理的行数。另外,只有真正修改数据库内容的命令才会消耗命令标识符。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.