每种数据库中都保留了自己所有的关键字,在表的定义过程中同样数据库保存了自己的系统列。看完关于postgresql的系统列部分的文档,还勾起了我想了解postgresql事务如何进行管理的冲动。先对postgresql的系统列进行一下了解,重要的是从中得到一些设计思想上的东西。
对于系统的保留关键字,都是禁止或者不建议用户进行定义时使用的词语。postgresql中的系统列是不允许作为用户定义的列名字段,在现实数据库设计过程中很少使用这些字段名称,所以不需要特别的关注,需要知道它们的存在。

oid
行对象表示符。postgresql为每个表的所有列自动添加该值(除非创建表时采用WITHOUT OIDS选项,该情况下oid列不显示),该列与类型同名。
在oracle中有rowid列,正常情况下是不显示的,也是系统自动生成的值,不是主角不多说。

tableoid
表对象表示符。该列对于从继承层次中进行查询非常有用,如果没有它,就很难说清行记录来自那个表。tableoid列与数据字典pg_class的oid进行关联可以获取表名。
oracle中似乎没有tableoid专有列名,同样可以通过user_objects视图查到表的id,对于判断行属于哪一列,oracle将对象的id号直接放到了rowid中。
oracle的rowid采用64进制表示方式,由18个字符表示:对象编号的6字符+文件编号的3字符+块编号的6字符+行编号的3字符,就是说直接找到行就能知道它属于那个文件,那个对象,在那个块上。

xmin
行版本的插入事务标识。(行版本代表着行的状态,行的每次更新会创建新的版本。)
如果对postgresql的事务管理设计方式不了解,很难清楚这个东西如何工作的。接下来可以好好了解一下事务的管理方式。

cmin
插入事务内的命令标识。(该值从0开始)。
这个更难理解了,插入事务能有多少命令标识?可以推测一下插入的方式不同该值可能不同,还是插入操作所处于不同的状态?,还是需要去了解事务的管理方式。

xmax
删除事务标识。对于非删除的行版本该值是0。该值为非0值时表示删除事务还没有提交,或者试图进行回滚。
也就是说明了该参数值至少有三种,用于表示删除处于的状态。

cmax
删除事务内部的命令标识,或者为0。

ctid
行版本在表中的物理位置。尽管ctid能够快速实现定位版本,但是经过VACUUM FULL之后,行的ctid就会移动或者更新。由此ctid不适于作行的行的长期标识符。
ctid表示的物理位置,如果VACUUM执行发生了行数据的物理移动,那索引又要如何?索引中指向表行位置的id又如何变化,目前对VACUUM没有深入了解,只能猜想是跟着变化。

文档中提到OID是32位的。很难对oid的唯一性作出假设。
事务标识与命令标识都是32位。

虽然从几个关键字很难解释事务管理方式,但是从中也能窥探一点。对象都是存放在文件中的,对象与文件之间又是如何关联在一起的?会不会也象oracle的rowid一样包含着文件号?tableoid与行之间的关系如何?弄清楚这些问题后,对postgresql对数据记录如何进行定位的问题也就能够了解很多。看来要了解更多的postgresql知识需要解决不少问题。

参考文档:http://www.postgresql.org/docs/8.0/interactive/ddl-system-columns.html

转载于:https://www.cnblogs.com/daduxiong/archive/2010/08/12/1798021.html

postgresql的系统列(system cloumns)相关推荐

  1. PostgreSQL 12系统表(10)pg_locks

    PostgreSQL 12系统表(10)pg_locks 视图pg_locks提供了数据库服务器上活动进程中保持的锁的信息. 名称 类型 引用 描述 locktype text 可锁对象的类型: re ...

  2. PostgreSQL 12系统表(5)pg_index

    PostgreSQL 12系统表(5)pg_index pg_index包含索引的部分信息. 名称 类型 引用 描述 indexrelid oid pg_class.oid 此索引的pg_class项 ...

  3. PostgreSQL 12系统表(1)pg_class

    PostgreSQL系统表(1)pg_class pg_class记录表和几乎所有具有列或者像表的东西.这包括索引.序列.视图.物化视图.组合类型和TOAST表. pg_class中的一些逻辑标志被以 ...

  4. PostgreSQL教程--系统表详解及常用SQL

    1 系统表 根据PostgreSQL12.2 的系统表进行整理的 1.1 pg_class pg_ class 是数据字典最重要的一个表 pg_class记录表和几乎所有具有列或者像表的东西.这包括索 ...

  5. Android平台上使用属性系统(property system)

    在使用Android的属性系统(property system)时遇到了一些问题,结合此次经历,对属性系统的使用做以简单介绍. 一.Property系统简介 属性系统是android的一个重要特性.它 ...

  6. arm linux sms,基于arm处理器的手机短消息加密系统 encryption system for sms based on arm.pdf...

    基于arm处理器的手机短消息加密系统 encryption system for sms based on arm 第 22卷 第 期 电子测量与仪器学报 Vol.22 No.2 2 4 - - 20 ...

  7. system var mysql_MySQL 系统变量(system variables)

    MySQL系统变量(system variables)实际上是一些系统参数,用于初始化或设定数据库对系统资源的占用,文件存放位置等等.这些个系统变量可以分为全局以及会话级别层面来修改,有些也可以进行动 ...

  8. PostgreSQL查看系统视图的源码

    PostgreSQL查看系统视图的源码 [pg13@mambapg ~]$ psql -E psql (13.2) Type "help" for help. postgres=# ...

  9. PostgreSQL 12系统表(11)pg_user

    PostgreSQL 12系统表(11)pg_user pg_user提供关于数据库用户的信息 名字 类型 描述 usename name 用户名 usesysid oid 用户的ID usecrea ...

最新文章

  1. 下载CentOS7、CentOS8镜像(ISO)
  2. 线性dp——cf988F
  3. 二次封装arcgis的timeslider
  4. js保存网络图片至本地
  5. [导入]网络安全工作者的必杀技
  6. C++连接MySQL数据库教程|如何连接数据库
  7. JavaScript 判断是不是回文字符串
  8. 通过端口查看进程和通过进程查看端口
  9. 计算广告丨《互联网广告算法和系统实践》读书笔记
  10. NOIP2016 暑期培训 D6
  11. 大数据可视化学习总结
  12. C++/OpenGL 入门(14):四面体表面贴图纹理图案
  13. oracle deadlock with TM lock in SX/SSX mode
  14. for循环语句求数组当中的最大元素
  15. 第七届iWeb峰会(HTML5峰会)议程曝光
  16. 20个经典bootsrtap后台html网站模板推荐
  17. Python骚操作:分析史上最好用的APP有哪些?
  18. 美图公司2018年营收27.9亿元 同比下滑37.8%
  19. CentOS 安装 php 运行环境
  20. python中enumerate()函数

热门文章

  1. 无极*压缩 之7-Zip!
  2. 一次诡异的数据库死锁问题排查过程 1
  3. kibana升级之后原本保存的数据dashboards, visualizations, index patterns丢失
  4. 合肥南站,你怎么这么棒?人民日报都夸你了!
  5. 性能测试: 编写一个 Locust 文件
  6. Codis 3.x 部署安装
  7. DNS and Bind (二)
  8. 给文本框添加模糊搜索功能(“我记录”MVC框架下实现)
  9. ASP.NE的缓存技术提高Web站点的性能
  10. python中if __name__ == __main__的解释