How to export a PostgreSQL query output to a csv file
我在将PostgreSQL输出从shell导出到csv文件时遇到问题。
我的SQL脚本名为
我在shell中输入以下命令:
1 | psql congress -af script.sql &> filename.csv |
但是当我打开
然后我尝试了另一种方式。 我编辑了我的
1 | Copy (SELECT * FROM ...) TO '/tmp/filename.csv' WITH CSV; |
然后我在数据库
1 | \i script.sql |
输出是:
1 | COPY 162 |
好吧,我的输出查询有162行。
所以我的输出表的162行已经复制到shell中。 如何将它们粘贴或移动到csv文件?
或者,如果我要使用filename.csv(附带截图),我该如何修复该csv / Excel文件的格式?
现代语法:
1 | COPY (SELECT * FROM ...) TO '/tmp/filename.csv' (format CSV); |
So the 162 rows of my output table have been copied in the shell. How
can I paste or move them to a csv file?
结果是CSV文件。使用匹配的分隔符,使用任何电子表格程序打开它。每个文件:
The default is a tab character in text format, a comma in CSV format
与Patrick评论一样,您可以以类似的方式使用相应的psql元命令
在这些相关答案中有更多解释:
- 将PostgreSQL表中的特定行导出为INSERT SQL脚本
- PostgreSQL:将结果数据从SQL查询导出到Excel / CSV
在一点切线上,还有另一种方法。
我在Windows批处理脚本中使用以下内容: -
1 | psql.exe -U %cUser% -h %cHost% -p %cPort% -d %cDB% -t -o"%dumpDir%\tables.txt" -A -c"SELECT table_schema, table_name FROM information_schema.tables WHERE table_schema = '%qSchema%';" |
诀窍是记住-A选项。它抑制了数据的空白填充。
我这样做是为了避免上面显示的COPY命令的权限错误,因为运行postgress的帐户与运行我的预定批处理文件的帐户没有相同的权限。
这给我一个给定模式中的表列表,结果如下: -
MYSCHEMA | MYTABLE1
MYSCHEMA | mytable2
然后,我使用FOR batch命令处理每一行。如果您真的想要一个CSV文件,那么您需要做的就是:
1 2 | ECHO table_schema,TABLE_NAME > %dumpDir%\TABLES.csv FOR /F"delims=|" %%p IN (%dumpDir%\TABLES.txt) DO echo %%p,%%q >> %dumpDir%\TABLES.csv |
可能不是最有效的机制,但在少量输出行上工作正常。
首先将您的连接信息复制到?/ .pgpass和
1 2 3 | cat ip:port:dbname:USER:pass > ~/.pgpass chmod 0600 ~/.pgpass psql -h serverip -U userid dbname -af test.sql | gzip > RESULT.txt.gz |