Answers:
已经建议的两种方法似乎都不必要地复杂。
只需使用psql内置\copy命令,该命令的工作方式与服务器端相同,COPY但是会通过有线协议复制到客户端并使用客户端路径。
因为这是一个psql反斜杠命令,所以您省略了尾随的分号,例如:
\copy products TO '/tmp/products.csv' CSV DELIMITER ','
有关详细信息,请参见手册中的\copy条目以获取psql命令和COPY命令文档。
就像COPY你可以使用\copy一个(SELECT ...)(在而非)复制数据时进行查询,而不是表名。
在某些有限的情况下可能有用的通常较差的替代方法是使用:
psql -t -P format=unaligned -P fieldsep_zero=on -c 'SELECT * FROM tablename'
并使用-o标志或外壳程序输出重定向将输出写入文件。您几乎应该总是\copy优先使用此功能。
psql脚本,以开头BEGIN,然后执行\copy命令,然后是COMMIT。或者使用psql -f运行脚本而不是使用here-document。
-A代替,-P format=unaligned我也认为您需要-P fieldsep=,
Linux命令是:
psql -h 127.0.0.1 -U username -o file.csv -c 'select id, name from clients;'
-t -P format=unaligned 到该命令,则会得到更接近的信息,例如错误的以竖线分隔的CSV,但是文本中的竖线不会被转义,因此将是无效的。
-P fieldsep=','只是由于缺少转义,这更有可能导致错误。-P fieldsep_zero=on如果您不介意解析以空字节分隔的文本,那将是可以的,因为空字节psql自然不会出现在输出中。