我误解了这个〜为什么COPY会改变输出? (PGPLSQL)

时间:2015-06-27 00:23:48

标签: database postgresql file-transfer

我非常接近解决我目前遇到的一个大问题,这是最后一点。我只是不知道为什么输出与数据库中的内容不同,当我需要它时完全相同。

在进入数据库之前读取数据:

[NULL][NULL][NULL][SO][etc.......]

将数据从COPY读取到文本文件:

\\000\\000\\000\\016[etc...} (it matches, basically)

使用二进制格式读取COPY之后的数据

PGCOPY
ÿ
[NULL][NULL][NULL][EOT][etc.......] (first line changes a fair bit)
(rest of the data stays exactly the same.)
˜ÿÿ

为了测试而运行postgresql查询:

COPY (SELECT byteacolumn FROM tablename WHERE id = 1) TO 'C:\path\file' (format:Binary);

因此,使用二进制格式几乎可以提供我所需要但不完全相同的内容。我可能会忽略添加的行,但我不知道第一行数据应该是什么。

TL; DR: COPY正在添加行并更改数据的第一行。我怎么让它停下来? :(

1 个答案:

答案 0 :(得分:2)

二进制COPY格式实际上只是被COPY FROM命令使用,因此它包含许多元数据以允许Postgres解释它。

在前两行之后,接下来的9个字节也是标题的一部分。接下来的2个字节给出了后续记录中的字段数,接下来的4个字节给出了以下字段中的字节数。只有这样才能开始实际数据。

格式的完整详细信息可以在documentation中找到,但请注意,它们可能会在将来的版本中发生变化。

(但是,假设这是你问here同样的问题,我认为这是错误的做法。你走在正确的轨道上lo_import / {{1 }}。)