解析COPY ...与BINARY结果

时间:2013-01-31 14:30:21

标签: postgresql

我正在使用它:

  

COPY(从表中选择field1,field2,field3)到'C://程序   Files / PostgreSql // 8.4 // data // output.dat'WITH BINARY

要将某些字段导出到文件,其中一个是ByteA字段。现在,我需要使用自定义程序读取文件。

如何解析此文件?

2 个答案:

答案 0 :(得分:5)

COPY...BINARY生成的bytea生成的文件的一般格式在documentation中有解释,而且非常重要。

{{1}}内容最容易处理,因为它们没有编码。

每个其他数据类型都有自己的编码规则,这些规则未在文档中描述,但在源代码中描述。来自doc:

  

确定实际元组数据的适当二进制格式   你应该查阅PostgreSQL源码,特别是* send和   * recv函数用于每个列的数据类型(通常这些函数位于源的src / backend / utils / adt /目录中   分布)。

答案 1 :(得分:1)

使用文本格式而不是二进制文件可能更容易(因此只需删除WITH BINARY)。文本格式具有更好的文档,旨在提高互操作性。二进制格式更适合在postgres安装之间移动,甚至还有版本不兼容。

文本格式将bytea字段写为文本,并使用\nnn八进制表示对任何不可打印的字符进行编码(除了少数特殊情况,它使用C样式\x模式进行编码,例如\n\t等。)这些列在COPY文档中。

唯一需要注意的是,您需要绝对确保在保存文件时使用的字符编码与读取时相同。确保可打印字符映射到相同的数字。我坚持使用SQL_ASCII,因为它使事情变得更简单。