如何将 PostgreSQL 查询输出导出为 CSV 文件

13 浏览
0 Comments

如何将 PostgreSQL 查询输出导出为 CSV 文件

我在将我的PostgreSQL输出从shell导出到csv文件时遇到了问题。

我的SQL脚本名字叫做script.sql

我在shell中输入了以下命令:

psql congress -af script.sql &> filename.csv

但是当我打开filename.csv文件时,所有列的值都被挤在了一个单元格中(见附加的屏幕截图)。

然后我尝试了另一种方式。我将script.sql进行了编辑:

Copy (Select * From ...) To '/tmp/filename.csv' With CSV;

然后我在数据库dbname内的shell中输入了以下命令。

\i script.sql

输出结果是:

COPY 162

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

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

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

\"Filename.csv的屏幕截图\"

admin 更改状态以发布 2023年5月20日
0
0 Comments

大多数之前的回答都是正确的,这里提供更多的细节,只适用于linux。

1.创建一个名为my_query.sql的文件。

\COPY (select * from some_table) TO '/tmp/some_file.csv' (format CSV);

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

psql "host=YOUR_HOST port=YOUR_PORT dbname=YOUR_DB user=YOUR_USER password=YOUR_PASS" -af my_query.sql

提示:如果您对表执行select *操作且表很大,则应谨慎对待可用的空闲磁盘空间,否则可能会耗尽空间。

0
0 Comments

现代语法:

COPY (SELECT * FROM ...) TO '/tmp/filename.csv' (FORMAT csv);

因此我的输出表的162行已被复制到shell中。我如何将它们粘贴或移动到一个csv文件中?

结果是CSV文件。使用匹配分隔符的任何电子表格程序打开它。手册:

默认情况下,文本格式使用制表符分隔,CSV格式使用逗号分隔。

psql元命令\copy是SQLCOPY函数的包装器。它读写客户端本地的文件(而COPY使用服务器本地的文件),不需要超级用户特权。

请参见:

0