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

相关推荐
水彩橘子5 小时前
PostgreSQL Streaming Replication 主从
数据库·postgresql
亚马逊云开发者5 小时前
Amazon Aurora PostgreSQL 快速配置实战:两次点击秒级创建无服务器数据库,告别 VPC 子网安全组配置噩梦
数据库·postgresql·serverless
羑悻的小杀马特9 小时前
PostgreSQL主从复制实战,告别单点故障,附主从切换与延迟监控命令。
运维·服务器·数据库·人工智能·postgresql
阿里小阿希18 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
WangJunXiang619 小时前
第09章:PostgreSQL日常维护
数据库·postgresql
dyyshb21 小时前
PostgreSQL 终极兜底方案
数据库·postgresql
Mr.徐大人ゞ1 天前
2-5.全文索引与并行查询
postgresql
360智汇云1 天前
PostgreSQL 全文检索深度指南:内置 FTS、zhparser 与 pg_search 全解
postgresql·django·全文检索
有想法的py工程师1 天前
PostgreSQL 性能优化实战:一条 Order by 的 SQL 从 5 秒优化到 100ms
大数据·数据库·postgresql·性能优化
翻斗包菜2 天前
PostgreSQL 日常维护完全指南:从基础操作到高级运维
运维·数据库·postgresql