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

相关推荐
钱彬 (Qian Bin)5 小时前
项目实践13—全球证件智能识别系统(内网离线部署大模型并调用)
数据库·postgresql·fastapi·ubuntu24.04·离线部署·qwen3大模型
l1t6 小时前
在postgres和duckdb中比较两个数组并只挑选不匹配的元素
数据库·sql·postgresql·数组·duckdb
东东的脑洞13 小时前
【面试突击】PostgreSQL vs MySQL 索引架构深度对比:聚簇索引 vs 堆表
mysql·postgresql·面试
nvd1114 小时前
在 Cloud SQL for PostgreSQL 上启用 pgvector
数据库·postgresql
兴趣互联1 天前
PostgresSQL数据库如何使用navicat创建分区表
数据库·postgresql
l1t1 天前
修改一个触发PostgreSQL 17.2 bug的SQL
sql·postgresql·bug
运维行者_1 天前
不同规模企业如何选 OPM?参考局域网管理软件与 cpu 温度监控适配指南
大数据·运维·服务器·网络·数据库·postgresql·snmp
IvorySQL2 天前
Postgres 18 默认开启数据校验及升级应对方案
数据库·人工智能·postgresql·开源
斯普信专业组2 天前
PostgreSQL高可用集群部署与配置指南
数据库·postgresql
IvanCodes3 天前
openGauss 核心体系架构深度解析
数据库·sql·postgresql·openguass