1.创建有时候会报错
ERROR: could not open extension control file "/usr/local/pgsql/share/extension/pageinspect.control": No such file or directory
解决方案:
2.使用
PostgreSQL中,对于每一行数据(称为一个tuple),包含有4个隐藏字段,分别是xmin、xmax、cmin、cmax。这四个字段是隐藏的,但可直接访问。
上图:
t_xmin:在创建(insert)记录(tuple)时,记录此值为插入tuple的事务ID;
t_xmax:默认值为0.在删除tuple时,记录此值。
t_cid:当一个tuple保存到硬盘的时候,它的t_ctid被初始化为它的TID(位置信息), 如果tuple被更新过,则t_ctid被改变为最新的tuple 替换版本
t_ctid:表示数据记录的物理行当信息,指的是 一条记录位于哪个数据块的哪个位移上面。 跟oracle中伪列 rowid 的意义一样的;只是形式不一样。
3.举个例子:
在进行DML操作的时候:
insert操作:事务ID为99进行insert 'A'操作,则在这一行,t_xmin=99 userdata='A'.
delete操作:事务ID为111进行delete操作,则t_xmax会记录111,user data被标记为delete,但是不会清除。
update操作:上一篇博客介绍过,PGupdate操作代价比较大,需要先删除再插入。
在下图中第一个update命令让t_cid变化,标明这一行已经被删除了(0,1)->(0,2)->(0,3)。
4.块空间清理
Vacuum专门进行清理工作,由于PG数据进行update会产生大量的垃圾数据,原因是先delete后insert,但delete并没有实际的释放空间,只是被标记为删除状态,这并不是设计缺陷,而是为了MVCC。
Vacuum可以由AutoVacuum来操作,也可以手动操作。
postgresql Tuple之t_ctid-CSDN博客
postgresql之ctid的浅谈 - lottu - 博客园 (cnblogs.com)