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

相关推荐
····懂···2 天前
关于PGCE专家技术认证解决方案
数据库·postgresql
我命由我123453 天前
PostgreSQL 保留关键字冲突问题:语法错误 在 “user“ 或附近的 LINE 1: CREATE TABLE user
数据库·后端·sql·mysql·postgresql·问题·数据库系统
卜锦元4 天前
华为高斯Gauss数据库版本与兼容协议--详解(附带Gorm连接示例代码)
数据库·mysql·华为·postgresql
__风__6 天前
PostgreSQL SysCache & RelCache
数据库·windows·postgresql
七夜zippoe6 天前
PostgreSQL 终端命令详解及实际应用案例
数据库·postgresql·oracle
有想法的py工程师8 天前
Ansible 查看PostgreSQL的版本
数据库·postgresql·ansible
求知摆渡8 天前
Spring Boot + MyBatis-Plus 实战中的那些“坑”与思考 —— 以身份认证服务为例
java·spring boot·postgresql
dingdingfish9 天前
PostgreSQL 16 Administration Cookbook 读书笔记:第7章 Database Administration
postgresql·database·administration·cookbook
m0_653031369 天前
PostgreSQL技术大讲堂 - 第97讲:PG数据库编码和区域(locale)答疑解惑
数据库·postgresql
kfepiza10 天前
PostgreSQL入门笔记250718
postgresql