PostgreSQL:将结果数据从SQL查询导出到Excel/CSV

PostgreSQL:将结果数据从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

我需要将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 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;