2011-12-13 74 views
0

postgres数组存储在内存中的布局是什么?我怎样才能得到真实的数据? 例如,对于array[0.1, 0.2, 0.3]::float8[],实际数据(0.1, 0.2, 0.3)是否像标准c数组一样存储?我可以使用memcpy来复制现有阵列吗?我们得到的指针是否使用ARR_DATA_PTR是指真实数据?PostgreSQL数组结构

+0

更好的问题/答案请参阅http://stackoverflow.com/q/9159440/287948 –

回答

4

PostgreSQL使用可变的C结构 - 所以前n个字节包含固定长度的数据,接下来的字节用于数据。前四个字节保存长度,跟随dimmensions的数量,dataoffset和元素数据类型的标识 - 下一个数据应该是一个保存NULL的位图,并且在此位图数据被串行化之后。 PostgreSQL数组不兼容C数组 - 在少数情况下,C数组是PostgreSQL数组的一部分。 ARR_DATA_PTR可以或不可以引用实际数据。取决于当前状态 - 数据应该被烘烤,消除,...

人们通常在使用pg数组时使用宏和支持函数。有几种方法可以对C数组进行解压缩或对pg数组进行迭代。