在 Postgres 中,如何在 COPY TO 命令中保留换行符?

say*_*ali 9 postgresql

我的表的一列包含带有“\n”的字符串。

postgres=# select * from stringtest ;

 id |    inputstr

----+-----------------

  1 | Name : NOC\r   +

    | \r             +

    | Detail : Detail

(1 row)
Run Code Online (Sandbox Code Playgroud)

但是当我使用 COPY TO 检索同一个表时,新行字符被转义

postgres=# COPY (select * from stringtest) TO STDOUT WITH DELIMITER E'\t' ;

1       Name : NOC\r\n\r\nDetail : Detail
Run Code Online (Sandbox Code Playgroud)

如何使 COPY TO 命令用新行替换 '\n' ?

预期输出:

postgres=# COPY (select * from stringtest) TO STDOUT WITH DELIMITER E'\t' ;

1       Name : NOC\r
        \r
        Detail : Detail
Run Code Online (Sandbox Code Playgroud)

如何实现这一目标?

Leg*_*ato 7

您可以使用 2 种文本格式:

  1. 简单分隔文本
  2. CSV

我相信,使用第一种格式(您使用的格式),每个逻辑行也是一个物理行,这意味着无法绕过文字“\n”。但是,如果您使用 CSV 选项,则可以使用嵌入的换行符引用字符串:

test=# copy (select * from stringtest) to stdout csv;
1,"line one
linetwo"
Run Code Online (Sandbox Code Playgroud)

不是 100% 您的预期输出,但如果 CSV 适合您 - 这就能解决问题。

使用制表符分隔符:

test=# copy (select * from stringtest) to stdout csv delimiter E'\t';
1   "line one
linetwo"
Run Code Online (Sandbox Code Playgroud)