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的接口,因为使用者适配了。

相关推荐
YMatrix 官方技术社区9 小时前
批流一体,从 Lambda 到 Domino|YMatrix 亮相 PGConf.Russia 2026,重构 PostgreSQL 极简实时架构
数据库·postgresql·重构·架构·ymatrix
腥辣甜咸9 小时前
想用队列?但我一个中间件都不想引入:PGMQ 超简单使用
postgresql
hudson20229 小时前
work_mem: 这是一个陷阱!
后端·postgresql
李长渊哦10 小时前
家用宽带动态公网 IP 下 Node + PostgreSQL 服务的 DDNS 全流程部署实践
网络协议·tcp/ip·postgresql
程序人生51810 小时前
ubuntu桌面版安装后配置允许root通过图形界面登录和ssh登录 亲测有效
ubuntu·postgresql·ssh
lbb 小魔仙11 小时前
无公网 IP 环境下的 PostgreSQL 远程访问方案:基于内网穿透技术的全流程解析
网络协议·tcp/ip·postgresql
蓦然乍醒1 天前
使用 DBeaver 还原 PostgreSQL 备份文件 (.bak) 技术文档
数据库·postgresql
l1t1 天前
DeepSeek总结的PostgreSQL使用 RDTSC 降低 EXPLAIN ANALYZE 的计时开销
数据库·postgresql
l1t1 天前
DeepSeek总结的PostgreSQL检查点和写入风暴
jvm·postgresql·oracle
丸辣,我代码炸了1 天前
用 PostgreSQL 一库模拟 MySQL / MongoDB / Redis / Elasticsearch(附 ts_rank 详解)
mysql·mongodb·postgresql