您的位置:寻梦网首页编程乐园数据库PostgreSQL 7.2 Documentation

1.2. 字段

一个 字段 要么是一个给定表的用户定义 字段,要么是下列系统定义字段之一:

oid

一行的对象标识符(对象 ID).它是一个序列号, 由 PostgreSQL 自动给所有行增加. OID 不能重复使用,并且是 32 位的量.

tableoid

包含该行的表的 OID.这个属性对于那些从继承级别里选择数据的查询 特别有用,因为如果没有它,我们就很难说明一行是从哪个独立的表中 取来的. tableoid 可以与 pg_class oid 字段连接起来获取表名字.

xmin

这个记录的插入事务的标识(事务 ID).(注意:一条记录是一行的一 个独立状态;每个行的更新都创建一条新的记录表示同一逻辑行.)

cmin

在做插入动作的事务中的命令标识符(从零开始).

xmax

做删除动作的标识符(事务 ID),如果是更新元组则为零. 在一个可见元组中这个字段可能为非零∶那通常表示该删除事务还未提交, 或者一次删除的企图被回卷了.

cmax

在做删除动作的事务里的命令标识符,或零.

ctid

该元组在它所在表里面的元组 ID.它是一个数值对 (块编号,快内的记录索引),它标识该记录的物理位置. 请注意尽管 ctid 可以用于快速定位记录,但一个行的 ctid 会在每次它更新的时候或者 VACUUM FULL 的时候改变. 因此 ctid 对于长期的行标识符而言是没有什么用的. 应该使用 OID,或者更好是用户定义序列号来标识逻辑行.

OID 是 32 位的数字并且在一个集群内是共用的.在一个大型或者长时间 使用的数据库里,这个计数器很有可能重叠.因此,做 OID 是唯一的假设 是很糟糕的习惯,除非你采取措施保证它是唯一的.在使用 OID 作为行 标识符的时候,我们建议你在每个准备使用 OID 的表的 OID 字段上创建一个 唯一约束.绝对不要假设 OID 是跨表唯一的;如果你需要数据库范围的 标识符,那么最好使用 tableoid 和行 OID 的组合. (译注∶如果是应用层的东西也可以创建整个数据库共用的序列.) (将来的 PostgreSQL 可能为每个表使用独立的 OID 计数器, 因此要实现 全局的唯一标识,你 必须 包括 tableoid .)

事务标识符也使 32 位的数字.在长时间运行的数据库里,事务 ID 也 有可能重叠.如果采取了合理的维护措施,那么这不是什么问题; 参阅 管理员手册 获取细节.不过, 长期(超过十亿次事务) 依赖事务 ID 的唯一性可不是什么好主意.

命令标识符也是 32 位的数字.这样,我们在一次事务里可以执行的命令 数就有了一个硬限制∶2 32 (四十亿)条. 实际上这个限制不是个问题 --- 要知道这个限制是 SQL 查询的数量,而不是处理的元组数量.

有关系统属性的更多信息,请参考 POSTGRES 规则系统的设计