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

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

5.5. 系统列 #

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

tableoid #

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

xmin #

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

cmin #

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

xmax #

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

cmax #

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

ctid #

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

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

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

报告文档问题

阅读 上游文档. 通过 PostgreSQL 文档反馈表单.