PostgreSQL 中的 OID 和 XID 说明

在PostgreSQL中经常碰到OID和XID,刚才不明白这些东西是干什么的。

oid: 行的对象标识符(对象 ID)。这个字段只有在创建表的时候使用了 WITH OIDS ,或者是设置了default_with_oids 配置参数时出现。 这个字段的类型是 oid (和字段同名)。 

例子: 
复制代码 代码如下:

CREATE TABLE pg_language 

lanname name NOT NULL, 
lanowner oid NOT NULL, 
lanispl boolean NOT NULL, 
lanpltrusted boolean NOT NULL, 
lanplcallfoid oid NOT NULL, 
lanvalidator oid NOT NULL, 
lanacl aclitem[] 

WITH ( 
OIDS=TRUE 
); 

OID 是 32 位的量,是在同一个集群内通用的计数器上赋值的。 对于一个大型或者长时间使用的数据库,这个计数器是有可能重叠的。 因此,假设 OID 是唯一的是非常错误的,除非你自己采取了措施来保证它们是唯一的。 

XID:事务ID,也是 32 位的量。在长时间运转的数据库里,它也可能会重叠。重叠后数据库就有可能出错,所以需要采取措施解决。 只要我们采取一些合适的维护步骤,这并不是很要命的问题。比如我们定义做vaccum。或者手动重置。 

重置用下面的命令: 

$ pg_resetxlog --help 
pg_resetxlog命令是重置PostgreSQL事务log的。 

使用方法: 
pg_resetxlog [OPTION]... DATADIR 

选项参数: 

-e XIDEPOCH 设置下一个事务ID EPOCH 
-f 实施强制更新 
-l TLI,FILE,SEG 强制设置新事务log的最小WAL开始位置 
-m XID 设置下一个MULTI事务ID 
-n 不做更新,只是取出现在的控制值,实验用的命令 
-o OID 设置下一个OID,重置OID 
-O OFFSET 设置下一个MULTI事务ID的OFFSET 
-x XID 设置下一个事务ID,重置XID 

写了这么一些,对内部是怎么回事感觉自己还是没有理清楚。呵呵!!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。