PostgreSQL存储引擎之heap tuple结构
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,struct HeapTupleHeaderData{ union { HeapTupleFields t_heap; DatumTupleFields t_d
千家信息网最后更新 2025年11月07日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安全错误
数据库的锁怎样保障安全
江西省青少年网络安全与信息科
厦门吉比特网络技术人力
IC设计和软件开发
建立网站需要服务器吗
枣庄小蜂互联网科技有限公司
百度智能云数据库怎么用
方舟服务器怎么弄
java软件开发专业怎么样
面试网络安全岗
奉贤区多功能软件开发产品介绍
护苗网络安全进课堂教案
用友数据库回复
学电脑编程需要学数据库吗
长沙酒店软件开发公司
西城区进口软件开发怎么样
游戏软件开发公司ppt图片
网络安全审查解析
java监听数据库变化
pki是不是网络安全技术
广东公安厅网络安全保卫处
我的世界麦块服务器没了
网络安全的意义体现在哪
软件开发bug率
数据库合并工具
服务器的显卡会使用过度吗
服务器如何应对数据安全
游戏软件开发公司ppt图片
mc服务器为什么不能倒多少岩浆
数据库1048错误
广东公安厅网络安全保卫处