我在将PostgreSQL输出从shell导出到csv文件时遇到问题。
我的SQL脚本名为script.sql
。
我在shell中输入了以下命令:
psql congress -af script.sql &> filename.csv
但是当我打开filename.csv
文件时,所有列的值都被压缩到Excel csv中的一列中(参见随附的屏幕截图)。
然后我尝试了另一种方法。我编辑我的script.sql
为:
Copy (Select * From ...) To '/tmp/filename.csv' With CSV;
然后在数据库dbname
的shell中键入以下命令。
\i script.sql
输出为:
COPY 162
我的输出查询有162行。
所以我的输出表的162行已经被复制到shell中了。我如何将它们粘贴或移动到csv文件中呢?
或者,如果我要使用文件名.csv(截图附后),我如何修复该csv/Excel文件的格式?
4条答案
按热度按时间frebpwbc1#
现代语法:
所以我的输出表的162行已经被复制到shell中了。我如何将它们粘贴或移动到csv文件中呢?
结果***是*CSV文件。使用任何电子表格程序使用匹配的分隔符打开它。The manual:
默认值为文本格式的制表符和CSV格式的逗号
psql meta命令
\copy
**是对SQLCOPY
函数的 Package 。它写入和读取客户端本地的文件(而COPY
使用服务器本地的文件),并且不需要超级用户权限。参见:
isr3a4wc2#
大多数previos的答案是正确的,这里有更多的细节,只适用于linux
1.创建一个类似my_query.sql的文件
2.在您更新了数据库和文件路径的变量后,运行下面的命令。
提示:小心你的空闲磁盘空间,如果你从your_table中选择 *,如果你有一个大表,你可能会用完空间。
qojgxg4l3#
首先将连接信息复制到~/.pgpass中,然后
slwdgvem4#
稍微偏离一点,还有另一种方法。
我在windows批处理脚本中使用以下代码:-
诀窍是记住-A选项。它禁止数据的空白填充。
我这样做是为了避免上面所示的COPY命令的权限错误,因为运行postgress的帐户与运行我的调度批处理文件的帐户没有相同的权限。
这会得到一个给定模式中的表列表,结果如下:
我的模式|mytable1
我的模式|mytable2
然后我使用FOR批处理命令来处理每一行。如果你真的想要一个CSV文件,你需要做的就是:
可能不是最有效的机制,但在少量的输出行上工作得很好。