postgresql的系统列(system cloumns)
每种数据库中都保留了自己所有的关键字,在表的定义过程中同样数据库保存了自己的系统列。看完关于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)相关推荐
- PostgreSQL 12系统表(10)pg_locks
PostgreSQL 12系统表(10)pg_locks 视图pg_locks提供了数据库服务器上活动进程中保持的锁的信息. 名称 类型 引用 描述 locktype text 可锁对象的类型: re ...
- PostgreSQL 12系统表(5)pg_index
PostgreSQL 12系统表(5)pg_index pg_index包含索引的部分信息. 名称 类型 引用 描述 indexrelid oid pg_class.oid 此索引的pg_class项 ...
- PostgreSQL 12系统表(1)pg_class
PostgreSQL系统表(1)pg_class pg_class记录表和几乎所有具有列或者像表的东西.这包括索引.序列.视图.物化视图.组合类型和TOAST表. pg_class中的一些逻辑标志被以 ...
- PostgreSQL教程--系统表详解及常用SQL
1 系统表 根据PostgreSQL12.2 的系统表进行整理的 1.1 pg_class pg_ class 是数据字典最重要的一个表 pg_class记录表和几乎所有具有列或者像表的东西.这包括索 ...
- Android平台上使用属性系统(property system)
在使用Android的属性系统(property system)时遇到了一些问题,结合此次经历,对属性系统的使用做以简单介绍. 一.Property系统简介 属性系统是android的一个重要特性.它 ...
- 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 ...
- system var mysql_MySQL 系统变量(system variables)
MySQL系统变量(system variables)实际上是一些系统参数,用于初始化或设定数据库对系统资源的占用,文件存放位置等等.这些个系统变量可以分为全局以及会话级别层面来修改,有些也可以进行动 ...
- PostgreSQL查看系统视图的源码
PostgreSQL查看系统视图的源码 [pg13@mambapg ~]$ psql -E psql (13.2) Type "help" for help. postgres=# ...
- PostgreSQL 12系统表(11)pg_user
PostgreSQL 12系统表(11)pg_user pg_user提供关于数据库用户的信息 名字 类型 描述 usename name 用户名 usesysid oid 用户的ID usecrea ...
最新文章
- 下载CentOS7、CentOS8镜像(ISO)
- 线性dp——cf988F
- 二次封装arcgis的timeslider
- js保存网络图片至本地
- [导入]网络安全工作者的必杀技
- C++连接MySQL数据库教程|如何连接数据库
- JavaScript 判断是不是回文字符串
- 通过端口查看进程和通过进程查看端口
- 计算广告丨《互联网广告算法和系统实践》读书笔记
- NOIP2016 暑期培训 D6
- 大数据可视化学习总结
- C++/OpenGL 入门(14):四面体表面贴图纹理图案
- oracle deadlock with TM lock in SX/SSX mode
- for循环语句求数组当中的最大元素
- 第七届iWeb峰会(HTML5峰会)议程曝光
- 20个经典bootsrtap后台html网站模板推荐
- Python骚操作:分析史上最好用的APP有哪些?
- 美图公司2018年营收27.9亿元 同比下滑37.8%
- CentOS 安装 php 运行环境
- python中enumerate()函数
热门文章
- 无极*压缩 之7-Zip!
- 一次诡异的数据库死锁问题排查过程 1
- kibana升级之后原本保存的数据dashboards, visualizations, index patterns丢失
- 合肥南站,你怎么这么棒?人民日报都夸你了!
- 性能测试: 编写一个 Locust 文件
- Codis 3.x 部署安装
- DNS and Bind (二)
- 给文本框添加模糊搜索功能(“我记录”MVC框架下实现)
- ASP.NE的缓存技术提高Web站点的性能
- python中if __name__ == __main__的解释