Postgresql的隐藏系统列

来源:未知 责任编辑:责任编辑 发表时间:2014-04-20 03:42 点击:
Postgresql的隐藏系统列
 
和oracle数据库一样,postgresql也有自身的一套隐藏的系统列。下面介绍如下: 
 
1.oid 
oid是object identifier的简写,其相关的参数设置default_with_oids设置一般默认是false,或者创建表时指定with (oids=false),其值长度32bit,实际的数据库系统应用中并不能完全保证其唯一性;   www.2cto.com  
2.tableoid 
是表对象的一个唯一标识符,可以和pg_class中的oid联合起来查看 
3.xmin 
是插入的事务标识符,是用来标识不同事务下的一个版本控制。每一次更新该行都会改变这个值。可以和mvcc版本结合起来看 
4.xmax 
是删除更新的事务标识符,如果该值不为0,则说明该行数据当前还未提交或回滚。比如设置begin事务时可以明显看到该值的变化 
 
5.cmin 
插入事务的命令标识符,从0开始 
6.cmax 
删除事务的命令标识符,或者为0 
7.ctid   www.2cto.com  
是每行数据在表中的一个物理位置标识符,和oracle的rowid类似,但有一点不同,当表被vacuum full或该行值被update时该值可能会改变。所以定义表值的唯一性最好还是自己创建一个序列值的主键列来标识比较合适。不过使用该值去查询时速度还是非常快的。 
 
下面举例说明:
postgres=# create table test(id int,name varchar);
CREATE TABLE
postgres=# insert into test select generate_series(1,3),repeat('kenyon',2);
INSERT 0 3
postgres=# select cmin,cmax,xmin,xmax,ctid from test;
 cmin | cmax | xmin | xmax | ctid  
------+------+------+------+-------
    0 |    0 | 1852 |    0 | (0,1)
    0 |    0 | 1852 |    0 | (0,2)
    0 |    0 | 1852 |    0 | (0,3)
(3 rows)
我们可以看到xmin值是一样的,表示是同一个事务
postgres=# begin;
BEGIN
postgres=# insert into test values (4,'a');
INSERT 0 1
postgres=# insert into test values (5,'aa');
INSERT 0 1
postgres=# insert into test values (6,'aa');
INSERT 0 1
postgres=# insert into test values (7,'aad');
INSERT 0 1
postgres=# commit;
COMMIT
postgres=# select cmin,cmax,xmin,xmax,ctid,* from test;
 cmin | cmax | xmin | xmax | ctid  | id |     name     
------+------+------+------+-------+----+--------------
    0 |    0 | 1852 |    0 | (0,1) |  1 | kenyonkenyon
    0 |    0 | 1852 |    0 | (0,2) |  2 | kenyonkenyon
    0 |    0 | 1852 |    0 | (0,3) |  3 | kenyonkenyon
    0 |    0 | 1853 |    0 | (0,4) |  4 | a
    1 |    1 | 1853 |    0 | (0,5) |  5 | aa
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Request.ServerVariables 参数大全
  • 执行全文索引时出现权限不足的解决方法
  • 导入excel文件处理流程节点的解决方案
  • 查看sql修改痕迹(SQL Change Tracking on Table)
  • MongoDB安装为Windows服务方法与注意事项
  • App数据层设计及云存储使用指南
  • PostgreSQL启动过程中的那些事三:加载GUC参数
  • 写给MongoDB开发者的50条建议Tip1
  • Percolator与分布式事务思考(二)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1