我正在尝试将一些数据从 Postgres 数据库复制到
ByteArrayOutputStream
对象中,因此我使用库的 copyManager
org.postgresql.copy.CopyManager
:
this.copyManager.copyOut("copy ("+sqlQuery+") TO STDOUT encoding 'WIN1252' " , bo)**
一切工作正常,除了当我有一些带有制表符空格的数据时,例如
- abcd
,当它进行复制时,它会将其替换为\t
,所以我得到的结果是-\tabcd
。
你能帮我吗?
您不需要默认的
text
格式,您需要 CSV:
COPY tab TO STDOUT (FORMAT 'csv', ENCODING 'WIN1252');
copy_expert
,它允许您指定 COPY
SQL 语句将包含您想要的所有选项。
为了避免转义字符(默认为
"
),请使用数据中未出现的分隔符:
COPY tab TO STDOUT (FORMAT 'csv', ENCODING 'WIN1252', DELIMITER '|');
psql
\copy
将真正的制表符(ascii 字符 9)交换为 \t
的原因是它格式化数据的输出,以便输出是格式良好的制表符分隔的数据文件。
不幸的是我不知道有什么方法可以避免这种情况。交换分隔符(例如,更改为
,
)不会阻止 \copy
命令用 \t
替换制表符。
由于这是 Google 上的热门内容,我想引用另一个选项 - Postgres COPY 命令转义新行和选项卡 会帮助未来的读者。