在带有双引号的postgres中输出为CSV

时间:2014-02-27 19:28:11

标签: postgresql csv

尝试将查询的输出转储到自动作业中的CSV文件中,并遇到包含我的逗号分隔符的字段的问题。由于这个特殊网络的性质,我必须通过几个环节来完成工作,而且我很有可能错过了一些非常明显的东西。

简而言之,我从使用PLINK的客户机启动我的脚本,通过SSH连接在另一个盒子上运行远程psql命令。那psql命令正在第三台机器上命中Postgres服务器(我不能直接从客户端连接到数据库,因此需要额外的步骤)。

如果我手动从客户端连接到服务器1,连接到Postgres框,并使用\ copy ...和CSV标头,创建的文件是完美的,包含逗号的任何字段都会自动被双引号括起来

但是,如果我尝试在单个命令中发出\ copy(或copy)命令,则输出不包含那些双引号,因此我最终会遇到字段中的逗号被解释为分隔符的情况后来一个。

换句话说,这有必要的双引号:

  1. 从客户端到服务器1的SSH。
  2. psql -Uuser -h server2 database
  3. \ copy(选择...)到'〜/ myfile.csv',带有CSV标题;
  4. 但不是:

    1. SSH从客户端到server1
    2. psql -Uuser -h server2 database -c "\copy (select ...) to '~/myfile.csv' with CSV header;"

1 个答案:

答案 0 :(得分:19)

使用FORCE_QUOTE

以下是该怎么做:

psql -U user -h server2 database -c "\copy (select ...) to '~/myfile.csv' WITH (FORMAT CSV, HEADER TRUE, FORCE_QUOTE *);"

COPY命令documentation