PostgreSQL:将结果数据从SQL查询导出到Excel/CSV
我需要将PostgreSQL查询的结果数据导出到Excel/CSV。 我使用PostgreSQL 8.2.11PostgreSQL:将结果数据从SQL查询导出到Excel/CSV,postgresql,file-io,postgresql-copy,Postgresql,File Io,Postgresql Copy,我需要将PostgreSQL查询的结果数据导出到Excel/CSV。 我使用PostgreSQL 8.2.11 具有Unix样式文件名的示例: COPY (SELECT * FROM tbl) TO '/var/lib/postgres/myfile1.csv' format csv; 阅读8.2版的链接。 您必须为目标文件使用绝对路径。请确保用空格对文件名进行双引号。MS Windows的示例: COPY (SELECT * FROM tbl) TO E'"C:\\Documents and
具有Unix样式文件名的示例:
COPY (SELECT * FROM tbl) TO '/var/lib/postgres/myfile1.csv' format csv;
阅读8.2版的链接。
您必须为目标文件使用绝对路径。请确保用空格对文件名进行双引号。MS Windows的示例:
COPY (SELECT * FROM tbl)
TO E'"C:\\Documents and Settings\\Tech\Desktop\\myfile1.csv"' format csv;
在PostgreSQL 8.2中,对于per default,需要使用双反斜杠,因为\是一个特殊字符,由PostgreSQL解释。适用于任何版本。全部是:
文件名
输入或输出文件的绝对路径名。Windows用户可能需要使用E字符串和双反斜杠作为路径分隔符
或者从Postgres 9.1开始使用默认的现代语法:
COPY tbl -- short for (SELECT * FROM tbl)
TO '"C:\Documents and Settings\Tech\Desktop\myfile1.csv"' (format csv);
或者,您也可以在Windows下查找文件名
另一种方法是使用
对于小型查询,您还可以使用GUI和从结果网格复制/粘贴到Excel
密切相关的回答:
MySQL的类似解决方案:
几个GUI工具,如Squirrel、SQL Workbench/J、AnySQL、ExecuteQuery,都可以导出到Excel文件 这些工具中的大多数都列在PostgreSQL wiki中: 这对我很有用:
COPY (SELECT * FROM table)
TO E'C:\\Program Files (x86)\\PostgreSQL\\8.4\\data\\try.csv';
在我的例子中,问题是尽管我是管理员,但在更改PostgreSQL下原始数据文件夹的路径后,我成功地获得了对特殊文件夹的写入权限。postgres Ubuntu的正确脚本是:
COPY (SELECT * FROM tbl) TO '/var/lib/postgres/myfile1.csv';
如果出现错误,如错误:无法打开服务器文件/文件:权限被拒绝,则可以修复该错误: 遇到了同样的问题,这是我找到的解决方案: 在/home下创建一个新文件夹,例如tmp $cd/家 使postgres成为该文件夹的所有者 $chown-R博士后:博士后tmp 在tmp中复制要写入数据库的文件,并确保这些文件也归postgres所有。 就这样。在那之后,您应该开始工作。在PostgreSQL 9.4中,要在Ubuntu中创建带有标题的CSV文件,请执行以下操作:
注意:文件夹必须可写。将选择*从tbl复制到'C:/Documents and Settings/Tech/Desktop/myfile1.csv';SQL错误:错误:不允许复制到的相对路径file@soul:我怀疑你的文件名中有空格。看我修改过的答案。@soul:ah。。窗户需要反斜杠。见经修正的答复。我使用Debian。@sanre6:请记住,COPY处理服务器本地的文件。如果您的客户机位于不同的计算机上,请使用psql客户机的meta命令\copy或其他一些工具,如pgAdmin。@AKIWEB:按照上面的“我的链接”阅读手册。如果还有不清楚的地方,问一个问题。注释不是该位置。名称为PostgreSQL或简称为Postgres。没有Postgre。如果文件名包含空格或特殊字符,则只需将其双引号。“C:\\auto\u new.txt”不需要。不过没有错。。我试图将>发送到“C:\\auto\u new.txt”,但同样的错误在发送之前还缺少一个空格。不确定PostgreSQL 8.2是否在意。它仍然可以在9.0中使用。什么版本的PostgreSQL?或者您可以复制到/tmp。为me.psql工作-将SELECT*从tbl复制到“/var/lib/postgres/myfile1.csv”;如果需要,不要忘记添加数据库、用户和密码-c标志提供从ubuntulinux终端运行命令的选项。我想在字符串值周围加引号。我该怎么办@MichaelYou可以试试“”或\
COPY (SELECT * FROM tbl) TO '/var/lib/postgres/myfile1.csv';
COPY (SELECT * FROM tbl) TO '/home/user/Desktop/result_sql.csv' WITH CSV HEADER;