PostgreSQL存储引擎之heap tuple结构
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,struct HeapTupleHeaderData{ union { HeapTupleFields t_heap; DatumTupleFields t_d
千家信息网最后更新 2026年11月01日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安全错误
数据库的锁怎样保障安全
互联网是不是新科技
互联网科技论文
汇久创客互联网科技
猫创互联网科技
互联网科技公司介绍
上海亿帐通互联网科技
重庆科技学院互联网
互联网科技创新企业排名
互联网科技公司招聘
科技互联网的估值
互联网大会黑科技排名
重庆互联网医院沙龙医盟信息科技
河南猎农互联网科技有限公司
允成互联网科技有限公司融资
伍佰万互联网科技怎么赚钱
广州富喜互联网络科技
互联网领先科技宣传片
宇信科技在杭州互联网排第几
陕西云淼互联网科技公司
互联网领先科技活动
蓝思科技飞鸽互联网
鑫亿盛互联网科技
碳银互联网科技有限公司
互联网科技咨询
互联网科技生活的内容
广州优美互联网科技
须眉科技是互联网公司吗
知域互联网科技有限公司大骗子
洛阳共同富裕互联网科技有限公司
2021世界互联网领先科技成果发布