5

我正在使用这个:

复制(从表中选择字段1,字段2,字段3)到'C://Program Files/PostgreSql//8.4//data//output.dat' WITH BINARY

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

我怎样才能解析这个文件?

4

2 回答 2

5

由 生成的文件的一般格式COPY...BINARY文档中进行了说明,并且非常重要。

bytea内容是最容易处理的,因为它们没有被编码。

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

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

于 2013-01-31T15:44:52.807 回答
1

使用文本格式而不是二进制可能更容易(所以只需删除WITH BINARY)。文本格式具有更好的文档,旨在实现更好的互操作性。二进制格式更适合在 postgres 安装之间移动,即使在那里它们也存在版本不兼容问题。

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

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

于 2013-01-31T16:50:08.000 回答