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

相关推荐
程序员学习随笔1 天前
PostgreSQL技术内幕24:定时任务调度插件pg_cron
数据库·postgresql
GIS小小研究僧2 天前
PostgreSQL 数据库备份与还原
数据库·postgresql·oracle·postgis
J.Kuchiki3 天前
【PostgreSQL内核学习 —— (WindowAgg(一))】
数据库·学习·postgresql
GIS小小研究僧4 天前
PostGIS笔记:PostgreSQL中表、键和索引的基础操作
数据库·笔记·postgresql
Amd7945 天前
数据库物理备份:保障数据完整性和业务连续性的关键策略
postgresql·数据恢复·数据库安全·备份策略·数据完整性·dba最佳实践·物理备份
Amd7945 天前
PostgreSQL 数据备份与恢复:掌握 pg_dump 和 pg_restore 的最佳实践
postgresql·数据恢复·数据安全·数据库备份·pg_dump·dba最佳实践·pg_restore
GIS小小研究僧6 天前
PostGIS笔记:PostgreSQL 数据库与用户 基础操作
数据库·笔记·postgresql
Allen_LVyingbo6 天前
DRG/DIP 2.0时代下基于PostgreSQL的成本管理实践与探索(上)
postgresql·健康医疗
betazhou7 天前
sysbench压力测试工具mysql以及postgresql
数据库·mysql·postgresql
YiHanXii7 天前
在 Windows 系统上,将 Ubuntu 从 C 盘 迁移到 D 盘
windows·ubuntu·postgresql