我是不是误会了~为什么 COPY 会改变输出? (PGPLSQL)
am i misunderstanding this~ Why is COPY changing the output? (PGPLSQL)
我非常接近解决我目前遇到的一个大问题,这是最后一点。我只是不知道为什么当我需要完全相同时输出与数据库中的不同。
入库前读取数据:
[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
正在添加行并更改我的数据的第一行。我如何让它停止? :(
二进制 COPY
格式实际上仅设计用于 COPY FROM
命令,因此它包含大量元数据以允许 Postgres 对其进行解释。
在前两行之后,接下来的 9 个字节也是 header 的一部分。接下来的 2 个字节给出了后续记录中的字段数,接下来的 4 个字节给出了后续字段中的字节数。只有这样,实际数据才开始。
格式的完整详细信息可以在 documentation 中找到,但请注意它们可能会在未来的版本中更改。
(但是,假设这与您询问 here 的问题相同,我认为这是错误的解决方法。您在 lo_import
/[ 的正确轨道上=13=].)
我非常接近解决我目前遇到的一个大问题,这是最后一点。我只是不知道为什么当我需要完全相同时输出与数据库中的不同。
入库前读取数据:
[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
正在添加行并更改我的数据的第一行。我如何让它停止? :(
二进制 COPY
格式实际上仅设计用于 COPY FROM
命令,因此它包含大量元数据以允许 Postgres 对其进行解释。
在前两行之后,接下来的 9 个字节也是 header 的一部分。接下来的 2 个字节给出了后续记录中的字段数,接下来的 4 个字节给出了后续字段中的字节数。只有这样,实际数据才开始。
格式的完整详细信息可以在 documentation 中找到,但请注意它们可能会在未来的版本中更改。
(但是,假设这与您询问 here 的问题相同,我认为这是错误的解决方法。您在 lo_import
/[ 的正确轨道上=13=].)