假设是 UNIX(-oid) shell。
如果您不能使用像@wildplasser 提供的此处文档,我建议在您的 SQL 命令中为字符串文字使用美元引号。用双引号替换周围的单引号会打开shell 中的变量扩展,如果包含特殊字符,这可能会产生副作用:、(反引号)和.$
`
\
psql -U username -d mydatabase -c 'COPY products_273 TO $$/tmp/products_199.csv$$ DELIMITER $$,$$ CSV HEADER;'
在 shell 中使用全引号(单引号),字符串按原样传递,对任何字符没有特殊含义。
如果可以排除或正确处理 SQL 字符串中的特殊字符,@ferhat 的简单解决方案就可以了。
或者,您可以将全引号字符串中的每个单引号 ('
)- 有效地结束引用的字符串,附加一个文字并开始一个新的全引号。'\''
'
psql -U username -d mydatabase -c 'COPY products_273 TO '\''/tmp/products_199.csv'\'' DELIMITER '\'','\'' CSV HEADER;'
有关的:
或者将 SQL 命令放在一个单独的文件中(不带引号)并使用psql -f
:
psql -U username -d mydatabase -f /path/to/myfile.sql
\copy
我假设您知道(psql 元命令)和COPY
(SQL 命令)之间的区别。\copy
读取和写入客户端本地的文件,而COPY
对服务器上的文件执行相同操作。如果客户端和服务器在同一安装上运行,您可以使用其中任何一个。但是,某些差异适用。