如何将PostgreSQL查询输出导出到csv文件

mfl*_*www 20 csv postgresql shell export-to-excel export-to-csv

我在将PostgreSQL输出从shell导出到csv文件时遇到问题.
我的SQL脚本被调用script.sql.

我在shell中输入以下命令:

psql congress -af script.sql &> filename.csv
Run Code Online (Sandbox Code Playgroud)

但是当我打开filename.csv文件时,Excel csv中的所有列的值都会被挤压到一列中(请参阅附带的屏幕截图).

然后我尝试了另一种方式.我编辑我script.sql的是:

Copy (Select * From ...) To '/tmp/filename.csv' With CSV;
Run Code Online (Sandbox Code Playgroud)

然后我在数据库中的shell中键入以下命令dbname.

\i script.sql
Run Code Online (Sandbox Code Playgroud)

输出是:

COPY 162
Run Code Online (Sandbox Code Playgroud)

好吧,我的输出查询有162行.

所以我的输出表的162行已经复制到shell中.如何将它们粘贴或移动到csv文件?

或者,如果我要使用filename.csv(附带截图),我该如何修复该csv/Excel文件的格式?

filename.csv的屏幕截图

Erw*_*ter 34

现代语法:

COPY (SELECT * FROM ...) TO '/tmp/filename.csv' (format CSV);
Run Code Online (Sandbox Code Playgroud)

所以我的输出表的162行已经复制到shell中.如何将它们粘贴或移动到csv文件?

结果 CSV文件.使用匹配的分隔符,使用任何电子表格程序打开它.每个文件:

默认值为文本格式的制表符,CSV格式的逗号

Patrick评论一样,您可以\copy以类似的方式使用相应的psql元命令.它写入(并读取)客户端本地文件,不需要超级用户权限.

在这些相关答案中有更多解释:

  • `COPY`要求您成为超级用户.`\ copy`可以由普通用户使用,并且似乎具有相同的语法 (17认同)
  • @Spike 是的。如果你想要标题,只需使用 (format CSV, HEADER) (4认同)

gre*_*pit 8

大多数以前的答案都是正确的,这里有更多详细信息并且仅适用于 Linux

1.创建一个类似my_query.sql的文件

\COPY (select * from some_table) TO '/tmp/some_file.csv' (format CSV);
Run Code Online (Sandbox Code Playgroud)

2.更新数据库和文件路径的变量后,运行以下命令。

psql "host=YOUR_HOST port=YOUR_PORT dbname=YOUR_DB user=YOUR_USER password=YOUR_PASS" -af my_query.sql
Run Code Online (Sandbox Code Playgroud)

提示:如果您从 your_table 中执行 select * 操作,请注意可用的可用磁盘空间,如果表很大,则可能会耗尽空间。