我需要将结果数据从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"';
答案 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';