每个数据表都由系统在底层隐式维护了若干系统列(system columns)。这些列通常不会出现在常规的 SELECT * 返回列表中,但可以在查询中显式指定列名进行检索。
核心系统列包括:
tableoid包含该数据行的物理表的全局对象标识符(OID)。当针对包含表继承或分区的父表发起查询时,该字段特别实用,能直观标识各行数据物理存放于哪张子表或具体分区中。
xmin写入(插入)该数据行的事务的事务标识符(XID)。
xmax更新或删除该数据行的事务的事务标识符(XID),如果该行尚未被修改或删除,则此字段为零。
cmin插入事务内部的命令标识符(从零开始递增)。
cmax更新或删除事务内部的命令标识符。
ctid
该数据行版本在数据表所属磁盘文件中的物理行版本位置(由数据块编号和块内元组索引偏移量构成)。虽然 ctid 能用于以极致速度精确定位物理行,但每当数据行被更新(UPDATE)时,MVCC 机制会为其生成新的物理行版本,因而 ctid 会随之改变,不能充当长期的行逻辑主键。