2011-12-13 92 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數組進行迭代。