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

相关推荐
FungLeo7 小时前
成为全栈·基础补充·数据库迁移与事务:数据结构怎样安全演进
mysql·postgresql·sqlite·数据一致性·数据库事务·数据库迁移·成为全栈
隔窗听雨眠2 天前
云数仓向PostgreSQL生态延伸的技术动因与工程代价
postgresql·数据库架构·云数仓
Peter-OK3 天前
PostgreSQL学习笔记(入门-进阶-精通说明)
笔记·学习·postgresql
FungLeo5 天前
成为全栈·基础补充·数据库索引:为什么加了索引还是慢
mysql·postgresql·sqlite·sql优化·数据库索引·成为全栈
ss2736 天前
为什么PostgreSQL适合AI场景?
数据库·人工智能·postgresql
考虑考虑6 天前
Posrgresql恢复.backup文件
数据库·后端·postgresql
Jesse_EC7 天前
换乘次数最少的路径 SQL 查询详解与实战经验——从 WITH RECURSIVE 到 pgRouting
数据库·postgresql
zhangjw347 天前
1-6 PostgreSQL 特色类型实战:数组、JSON & JSONB、枚举、范围类型
数据库·postgresql
IvorySQL7 天前
深入 PostgreSQL WAL:从崩溃恢复到逻辑复制
数据库·postgresql
FungLeo7 天前
成为全栈·Go 后端篇·从 Node SQLite 到 PostgreSQL:把迁移做成独立交付物
postgresql·golang·sqlite·go·数据库迁移·成为全栈