1.2. 列 #
一个列既可以是给定表的一个用户定义列,也可以是下列系统定义列之一:
- oid
一行的唯一标识符(对象 ID)。这是由 Postgres 自动为所有行添加的一个序列号。OID 不会被重用,并且是 32 位的量。
- tableoid
包含该行的表的 OID。对于从继承层次中选择的查询来说,这个属性特别有用,因为没有它就很难分辨一行来自哪个具体的表。tableoid 可以与 pg_class 的 OID 属性连接来获得表名。
- xmin
插入该元组的事务的标识(事务 ID)。(注意:元组是一行的单个状态;对一行的每次 UPDATE 都会为同一逻辑行创建一个新元组。)
- cmin
插入事务内部的命令标识符(从零开始)。
- xmax
删除事务的标识(事务 ID),对于未删除的元组为零。实践中,在一个可见元组中它从不为非零。
- cmax
删除事务内部的命令标识符,或为零。同样,它在一个可见元组中从不为非零。
- ctid
该元组在其表中的元组 ID。这是一对(块号,块内元组索引),标识该元组的物理位置。注意,虽然 ctid 可以用来非常快速地定位元组,但一行的 ctid 在每次被更新或被 VACUUM 移动时都会改变。因此 ctid 作为长期行标识符是没有用的。应该使用 OID,或者更好的是用户定义的序列号来标识逻辑行。
关于系统属性的更多信息请参阅 Stonebraker, Hanson, Hong, 1987 。事务和命令标识符都是 32 位的量。