我非常接近解决我目前遇到的一个大问题,这是最后一点。我只是不知道为什么输出与数据库中的内容不同,当我需要它时完全相同。
在进入数据库之前读取数据:
[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
正在添加行并更改数据的第一行。我怎么让它停下来? :(
答案 0 :(得分:2)
二进制COPY
格式实际上只是被COPY FROM
命令使用,因此它包含许多元数据以允许Postgres解释它。
在前两行之后,接下来的9个字节也是标题的一部分。接下来的2个字节给出了后续记录中的字段数,接下来的4个字节给出了以下字段中的字节数。只有这样才能开始实际数据。
格式的完整详细信息可以在documentation中找到,但请注意,它们可能会在将来的版本中发生变化。
(但是,假设这是你问here同样的问题,我认为这是错误的做法。你走在正确的轨道上lo_import
/ {{1 }}。)