有没有办法用 postgres 副本保留制表符空间?

问题描述 投票:0回答:2

我正在尝试将一些数据从 Postgres 数据库复制到

ByteArrayOutputStream
对象中,因此我使用库的
copyManager
org.postgresql.copy.CopyManager
:

this.copyManager.copyOut("copy ("+sqlQuery+") TO STDOUT encoding 'WIN1252' " , bo)**

一切工作正常,除了当我有一些带有制表符空格的数据时,例如

-  abcd
,当它进行复制时,它会将其替换为
\t
,所以我得到的结果是
-\tabcd

你能帮我吗?

java postgresql
2个回答
0
投票

您不需要默认的

text
格式,您需要 CSV:

COPY tab TO STDOUT (FORMAT 'csv', ENCODING 'WIN1252');

使用 psycopg2,使用

copy_expert
,它允许您指定
COPY
SQL 语句将包含您想要的所有选项。

为了避免转义字符(默认为

"
),请使用数据中未出现的分隔符:

COPY tab TO STDOUT (FORMAT 'csv', ENCODING 'WIN1252', DELIMITER '|');

0
投票

psql

\copy
将真正的制表符(ascii 字符 9)交换为
\t
的原因是它格式化数据的输出,以便输出是格式良好的制表符分隔的数据文件。

不幸的是我不知道有什么方法可以避免这种情况。交换分隔符(例如,更改为

,
)不会阻止
\copy
命令用
\t
替换制表符。

由于这是 Google 上的热门内容,我想引用另一个选项 - Postgres COPY 命令转义新行和选项卡 会帮助未来的读者。

© www.soinside.com 2019 - 2024. All rights reserved.