PostgreSQL存储引擎之heap tuple结构
发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,struct HeapTupleHeaderData{ union { HeapTupleFields t_heap; DatumTupleFields t_d
千家信息网最后更新 2025年02月06日PostgreSQL存储引擎之heap tuple结构
struct HeapTupleHeaderData{ union { HeapTupleFields t_heap; DatumTupleFields t_datum; }t_choice; ItemPointerData t_ctid;// uint16 t_infomask2; /* number of attributes + various flags */ uint16 t_infomask; /* various flag bits, see below */ uint8 t_hoff; /* sizeof header incl. bitmap, padding */ bits8 t_bits[FLEXIBLE_ARRAY_MEMBER]; /* bitmap of NULLs */};
t_choice是具有两个成员的联合类型:
t_heap:用于记录对元组执行插入/删除操作的事务ID和命令ID,这些信息主要用于并发控制时检查元组对事务的可见性。
t_datum:当一个新元组在内存中形成的时候,我们并不关心其事务可见性,因此在t_choice中只需用DatumTupleFields结构来记录元组的长度等信息。但在把该元组插入到表文件时,需要在元组头信息中记录插入该元组的事务和命令ID,故此时会把t_choice所占用的内存转换为HeapTupleFields结构并填充相应数据后再进行元组的插入。
t_ctid用于记录当前元组或者新元组的物理位置(block号及块内偏移量),若元组被更新(PostgreSQL对元组的更新采用的是标记删除旧版本元组并插入新版本元组的方式),则记录的是新版本元组的物理位置。
t_infomask2使用其低11位表示当前元组的属性个数,其他位则用于包括用于HOT技术及元组可见性的标志位。
t_infomask用于标识元组当前的状态,比如元组是否具有OID、是否有空属性等,t_infomask的每一位对应不同的状态,共16种状态。
t_hoff表示该元组头的大小。
_bits[]数组用于标识该元组哪些字段为空。
PostgreSQL中对于元组采用多版本技术存储,对元组的每个更新操作都会产生一个新版本,版本之间从老到新形成一条版本链(将旧版本的t_ctid字段指向下一个版本的位置即可)。
版本
事务
位置
信息
状态
更新
结构
内存
命令
字段
属性
技术
标识
物理
新元
组头
存储
不同
老到
两个
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
肥东租房软件开发
山东省互联网科技创新大赛
安全检测云主机是一套服务器吗
有什么好的服务器我的世界电脑版
java组态软件开发
看对网络安全承诺书说说
厦门精配数据库类型
雷电模拟器服务器爆满怎么办
dsdb数据库是什么意思
达州分布式服务器行情
软件开发公司行业发生什么事
飞宇网络技术团队
开课吧网络安全工程师全套课程
sql数据库文件修复
网络安全执法检查重要性
天津智能软件开发销售电话
网络安全拟态技术
协议软件开发前景如何
江苏应用软件开发价格
三级网络技术71分能过吗
数据库中存放的数据是什么
数据库锁超过几分钟解决
数据库批量插入回滚
创建数据库的备份文件
大兴安岭呼玛网络安全
蚂蚁蓉信网络技术
程序员需要掌握哪些软件开发
北京网络安全通报中心
两张数据库表怎么关联查询
奥维企业服务器登超时