我正在使用它:
COPY(从表中选择field1,field2,field3)到'C://程序 Files / PostgreSql // 8.4 // data // output.dat'WITH BINARY
要将某些字段导出到文件,其中一个是ByteA字段。现在,我需要使用自定义程序读取文件。
如何解析此文件?
答案 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,因为它使事情变得更简单。