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

相关推荐
IvorySQL14 小时前
IvorySQL Agent 探索与实践
数据库·人工智能·postgresql·oracle·ivorysql
倒流时光三十年17 小时前
PostgreSQL JSONB 操作符详解
大数据·数据库·postgresql
周杰伦的稻香1 天前
PostgreSQL中MVCC实现机制
数据库·postgresql
IvorySQL2 天前
PG 日报|多款 PostgreSQL 工具新版本集中发布
数据库·postgresql
IT 小阿姨(数据库)2 天前
PostgreSQL 因主库表空间错乱_缺少软链接、从库配置问题,导致主从复制故障【修复过程】
数据库·postgresql
EterNity_TiMe_2 天前
别让告警变成噪音:用Prometheus和Alertmanager搭一套可远程查看的监控系统
数据库·人工智能·ai·postgresql·prometheus·cpolar
ClouGence3 天前
保障公共安全,一线治安机构实时数据应用与实践
数据库·mysql·postgresql
AI的探索之旅3 天前
从 Ubuntu 14.04 到 24.04:TI AM335x 开发环境完整迁移与 Agent 接管方案
linux·数据库·嵌入式硬件·ubuntu·postgresql
IvorySQL4 天前
PG 技术日报|2026-07-04
数据库·人工智能·postgresql·开源
IvorySQL4 天前
IvorySQL HTAP 实时湖仓接入引擎
数据库·postgresql·开源·htap·ivorysql