【问题标题】:Output to CSV in postgres with double-quotes使用双引号在 postgres 中输出到 CSV
【发布时间】:2014-03-31 11:15:33
【问题描述】:

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

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

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

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

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

  1. 从客户端到服务器 1 的 SSH。
  2. psql -Uuser -h server2 数据库
  3. \copy (select ...) to '~/myfile.csv' with CSV header;

但没有:

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

【问题讨论】:

  • 你试过了吗:-c "\copy (select ...) to '~/myfile.csv' WITH (FORMAT CSV, HEADER TRUE, FORCE_QUOTE *);
  • 我没有,看起来这正是我所需要的。谢谢!

标签: postgresql csv


【解决方案1】:

使用FORCE_QUOTE

这是怎么做的:

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

COPY 命令documentation

【讨论】:

  • 这在红移中不起作用吗?我不断在文件中收到错误,例如“错误:“STDOUT”第 1 行或附近的语法错误:COPY DB.my_tab TO STDOUT WITH (FORMAT CSV,"
猜你喜欢
  • 2021-10-30
  • 2017-01-11
  • 1970-01-01
  • 2016-09-14
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
相关资源
最近更新 更多