![](http://www.cuug.com.cn/uploadfile/2022-12/32793553242.jpg)
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。
Part 16:元组(行)结构与dml操作
内容1:PostgreSQL行结构
内容2:DML操作方式
内容3:块空间清理
· 元组(行)结构
t_xmin保存插入此元组的事务的txid。
t_xmax保存删除或更新此元组的事务的txid。如果此元组未被删除或更新,则t_xmax设置为0,这意味着无效。
![](http://www.cuug.com.cn/uploadfile/2023-05/34071528951.jpg)
行头信息
· 块中的行结构
![](http://www.cuug.com.cn/uploadfile/2023-05/34071530955.jpg)
工具介绍
· Pageinspect工具
PostgreSQL提供了一个扩展pageinspect,它是一个贡献模块,用来显示数据库页面的内容。
该pageinspect模块提供的功能允许我们从底层检查数据库页面的内容,这对于调试非常有用。所有这些功能只能由超级用户使用
· 使用方法:
CREATE EXTENSION pageinspect;SELECT lp as tuple, t_xmin, t_xmax, t_field3 as t_cid, t_ctid FROM heap_page_items(get_raw_page('tbl', 0));
DML操作
· Insertion
![](http://www.cuug.com.cn/uploadfile/2023-05/34071533197.jpg)
· Deletion
![](http://www.cuug.com.cn/uploadfile/2023-05/34071535094.jpg)
· Update
执行第一个更新命令时,通过将txid 100设置为t_xmax,逻辑上删除Tuple_1,然后插入Tuple_2。然后,将元组1的t_ctid重写为指向元组2。
当执行第二个UPDATE命令时,与第一个UPDATE命令一样,Tuple_2在逻辑上被删除,Tuple_3被插入。
![](http://www.cuug.com.cn/uploadfile/2023-05/34071537963.jpg)
块空间清理
· Vacuum操作
块中被删除的行的是逻辑上删除,物理上还保留在块中,如果长时间不清理,会造成垃圾空间膨胀,设想,如果一个块中有50%垃圾,那么就浪费50%的存储空间,如果读到内存,也会浪费50%的内存空间,所以需要定期的清理,而清理的工作由AutoVacuum来操作,或者我们也可以手动操作。
pg_freespacemap插件可以很好的监测块中空间的使用情况,可当作full vacuum操作的参考信息。
![](http://www.cuug.com.cn/uploadfile/2022-12/32837376910.jpg)
以上就是Part 16 - PostgreSQL 元组(行)结构与dml操作 的内容,欢迎进群一起探讨交流,往期视频,联系cuug客服
标签:PostgreSQL,16,Tuple,dml,元组,PG,xmax,操作 From: https://www.cnblogs.com/cnblogs5359/p/17415678.html