2013-01-31 85 views
4

我使用這個:解析複製...二進制結果

COPY(選擇場,場2,從表中字段3)改爲「C://程序 文件/ PostgreSQL的// // 8.4 data // output.dat'WITH BINARY

要將某些字段導出到文件,其中一個字段是ByteA字段。現在,我需要用自定義程序讀取文件。

我該如何解析這個文件?

回答

5

COPY...BINARY生成的文件的一般格式在documentation中解釋,並且它是非平凡的。

bytea內容是最容易處理的,因爲它們沒有編碼。

每個其他數據類型都有其自己的編碼規則,這些規則在文檔中未在源代碼中描述。從DOC:

要確定實際元組數據 您應該諮詢PostgreSQL源代碼相應的二進制格式,特別是*發送和 *爲每列的數據類型的recv功能(通常這些功能被發現在源文件 的src/backend/utils/adt /目錄中)。

+1

感謝!在您指出的文檔的幫助下,我實現了一個簡單的解析器來讀取整個文件。這很簡單,因爲我所有的字段都是Varchar,除了一個ByteA。 – leonardorame

1

它可能更容易使用文本格式而不是二進制文件(所以只需刪除WITH BINARY)。文本格式具有更好的文檔,旨在提供更好的互操作性。二進制格式更適合在postgres安裝之間移動,甚至在那裏它們有版本不兼容。

文本格式將寫入BYTEA領域,如果它是文本,編碼與\nnn八進制表示任何非打印字符(除了一些特殊情況下,它使用C風格\x模式編碼,如\n\t等)這些在COPY文檔中列出。

唯一需要注意的是你需要絕對確保你使用的字符編碼與讀取文件時保存的字符相同。確保可打印字符映射到相同的數字。我會堅持SQL_ASCII,因爲它讓事情變得更簡單。