尝试将查询的输出转储到自动作业中的CSV文件中,并遇到包含我的逗号分隔符的字段的问题 . 由于这个特殊网络的性质,我必须通过几个环节来完成工作,而且我很有可能错过了一些非常明显的东西 .
简而言之,我从一台客户端计算机启动我的脚本,该计算机使用PLINK通过SSH连接在另一个盒子上运行远程psql命令 . 那个psql命令正在第三台机器上命中一个Postgres服务器(我不能直接从客户端连接到DB,因此中间有一个额外的步骤) .
如果我手动从客户端SSH连接到服务器1,连接到Postgres框,并使用\ copy ...与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;"
1 回答
使用FORCE_QUOTE
这是怎么做的:
COPY
command documentation