Postgresql关于EOH的使用注意

注意通常拿到的指针不是EOH头

EOH是一种扩展数据结构,之前有几篇博客讨论过了,最近在改相关代码加深了一些理解。

EOH目前支持ER_methods、EA_methods两套实现,分别是record类型展开和数组类型展开。

在内存中的样子大概是(EA为例)

复制代码
typedef struct ExpandedArrayHeader
{
	ExpandedObjectHeader hdr;

	int			ea_magic;

	int			ndims;			/* # of dimensions */
	int		   *dims;			/* array dimensions */
	int		   *lbound;			/* index lower bounds for each dimension */

	Oid			element_type;	/* element type OID */
	int16		typlen;			/* needed info about element datatype */
	bool		typbyval;
	char		typalign;
	...
	...
	...
  • 注意:使用时传的不是指向EOH头部的指针,而是使用hdr->eoh_rw_ptr或hdr->eoh_ro_ptr中存放的指针(指向EOH头部)。
  • 注意eoh_rw_ptr和eoh_ro_ptr是1be结构,用DatumGetEOHP函数取出其中存放的指针。

使用时经常需要一层转换,例如这里:

注意使用value的逻辑一般都兼容EOH或valena结构

EOH使用EOH_flatten_into后会拉平数据,输出到result中紧凑存放。

一般的处理逻辑都可以适配EOH或这种紧凑形式,无需互相转换。

这就是为什么EOH只有flatten接口,没有生成EOH的接口,因为使用者适配了。

相关推荐
一只fish2 小时前
PostgreSQL、Oracle、MySQL MVCC机制总结与对比
数据库·mysql·postgresql·oracle
白兰地空瓶1 天前
PostgreSQL核心概念深度解析:从"户口本"到"高级工程师"的跃迁之路
postgresql
墨笔之风1 天前
MySQL与PostgreSQL选型对比及适用场景说明
数据库·mysql·postgresql
神秘的猪头1 天前
AI全栈项目 Day 3:不仅是数据库,更是你的“数据堡垒” —— PostgreSQL 硬核入门
数据库·sql·postgresql
百炼成神 LV@菜哥1 天前
记GaussDB(for PostgreSQL)入门SQL操作
数据库·postgresql·gaussdb
a程序小傲2 天前
京东Java面试被问:动态规划的状态压缩和优化技巧
java·开发语言·mysql·算法·adb·postgresql·深度优先
技术不打烊2 天前
从 MySQL 到 PG,你需要跨越的几道语法“鸿沟”
数据库·mysql·postgresql
IvorySQL2 天前
拆解 PostgreSQL 连接机制:从进程模型到通信协议
数据库·postgresql
SunflowerCoder3 天前
EF Core + PostgreSQL 配置表设计踩坑记录:从 23505 到 ChangeTracker 冲突
数据库·postgresql·c#·efcore
chirrupy_hamal3 天前
PostgreSQL 中的“脏页(Dirty Pages)”是什么?
数据库·postgresql