【发布时间】:2014-03-31 11:15:33
【问题描述】:
尝试在自动作业中将查询的输出转储到 CSV 文件中,并遇到列包含我的逗号分隔符的字段的问题。由于这个特殊网络的性质,我必须跳过几圈才能完成工作,而且很有可能我遗漏了一些非常明显的东西。
简而言之,我从使用 PLINK 通过 SSH 连接在另一个机器上运行远程 psql 命令的客户端计算机启动我的脚本。该 psql 命令正在访问第三台机器上的 Postgres 服务器(我无法直接从客户端连接到数据库,因此需要额外的步骤)。
如果我从客户端手动 SSH 到服务器 1,连接到 Postgres 框,并使用带有 CSV 标头的 \copy...,创建的文件是完美的,并且任何包含逗号的字段都会自动用双引号括起来.
但是,如果我尝试在单个命令中发出该 \copy(或复制)命令,则输出不包含那些双引号,因此我最终会遇到字段中的逗号被解释为分隔符的情况后一个。
换句话说,这有必要的双引号:
- 从客户端到服务器 1 的 SSH。
- psql -Uuser -h server2 数据库
- \copy (select ...) to '~/myfile.csv' with CSV header;
但没有:
- 从客户端到服务器 1 的 SSH
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