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

时间:2011-11-14 09:07:31

标签: postgresql file-io postgresql-copy

我需要将结果数据从PostgreSQL中的查询导出到Excel / CSV 我使用PostgreSQL 8.2.11

SQL error:

ERROR:  relative path not allowed for COPY to file
In statement:

COPY (select distinct(m_price) from m_product)TO '"c:\auto_new.txt"';

6 个答案:

答案 0 :(得分:34)

Unix风格文件名示例:

COPY (SELECT * FROM tbl) TO '/var/lib/postgres/myfile1.csv' format csv;

阅读manual about COPY(链接到8.2版) 您必须为目标文件使用绝对路径。请务必使用空格双引号文件名。 MS Windows示例:

COPY (SELECT * FROM tbl)
TO E'"C:\\Documents and Settings\\Tech\Desktop\\myfile1.csv"' format csv;

PostgreSQL 8.2 中,默认情况下为standard_conforming_strings = off,您需要加倍反斜杠,因为\是一个特殊字符并由PostgreSQL解释。适用于任何版本。这都是in the fine manual

  

<强> 文件名

     

输入或输出文件的绝对路径名。 Windows用户可能需要使用E''字符串和用作路径分隔符的双反斜杠。

standard_conforming_strings = on的现代语法(自Postgres 9.1起默认):

COPY tbl  -- short for (SELECT * FROM tbl)
TO '"C:\Documents and Settings\Tech\Desktop\myfile1.csv"' (format csv);

或者您可以also use forward slashes获取Windows下的文件名。

另一种方法是使用meta-command \copy of the default terminal client psql

您还可以使用pgadmin之类的GUI,并从结果网格中复制/粘贴到Excel以进行小查询。

密切相关的答案:

MySQL的类似解决方案:

答案 1 :(得分:6)

PostgreSQL 9.4 中使用 Ubuntu 中的标题创建文件CSV:

COPY (SELECT * FROM tbl) TO '/home/user/Desktop/result_sql.csv' WITH CSV HEADER;

注意:文件夹必须是可写的。

答案 2 :(得分:3)

这对我有用:

COPY (SELECT * FROM table) 
    TO E'C:\\Program Files (x86)\\PostgreSQL\\8.4\\data\\try.csv';

在我的情况下,问题在于对特殊文件夹的写入权限(尽管我是以管理员身份工作),在PostgreSQL下更改原始数据文件夹的路径后,我获得了成功。

答案 3 :(得分:2)

Squirrel,SQL Workbench / J,AnySQL,ExecuteQuery等几个GUI工具可以导出到Excel文件。

大多数这些工具都列在PostgreSQL wiki中:

http://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools

答案 4 :(得分:2)

如果您遇到类似&#34的错误;错误:无法打开服务器文件&#34; / file&#34;:权限被拒绝&#34;你可以解决这个问题:

遇到同样的问题,这是我找到的解决方案: 在/ home下创建一个新文件夹(例如,tmp) $ cd / home 使postgres成为该文件夹的所有者 $ chown -R postgres:postgres tmp 在tmp中复制要写入数据库的文件,并确保它们也归postgres所有。 就是这样。你应该在那之后做生意。

答案 5 :(得分:0)

postgres(Ubuntu)的正确脚本是:

COPY (SELECT * FROM tbl) TO '/var/lib/postgres/myfile1.csv';