lil*_*lil 1 c arrays postgresql
存储在内存中的postgres数组的布局是什么?如何获得真实数据?例如,对于array[0.1, 0.2, 0.3]::float8[],实际数据是否(0.1, 0.2, 0.3)像标准c数组那样存储?我可以memcpy用来复制现有阵列吗?我们使用的指针是否指向ARR_DATA_PTR实际数据?
PostgreSQL使用可变的C结构-因此前n个字节包含固定长度的数据,后一个字节用于数据。前四个字节保留长度,其次为维数,数据偏移量和元素数据类型的标识-下一个数据应为保留NULL的位图,并在对该位图数据进行序列化之后。
PostgreSQL数组与C数组不兼容-分别。在少数情况下,C数组是PostgreSQL数组的一部分。ARR_DATA_PTR可以或不能引用真实数据。取决于当前状态-应当烘烤,清除,...
人们在使用pg数组时通常会使用宏和支持功能。有多种方法可以解压缩到C数组或通过pg数组进行迭代。