26

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

6 回答 6

39

具有 Unix 样式文件名的示例:

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

阅读有关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 解释。适用于任何版本。这一切都在精美的手册中

文件名

 输入或输出文件的绝对路径名。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);

或者您也可以在 Windows 下对文件名使用正斜杠

另一种方法是使用默认终端客户端的元命令\copypsql

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

密切相关的答案:

MySQL的类似解决方案:

于 2011-11-14T09:11:58.587 回答
8

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

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

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

于 2015-08-19T17:09:20.030 回答
4

这对我有用:

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

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

于 2013-01-16T16:06:14.160 回答
2

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

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

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

于 2011-11-14T13:20:14.073 回答
2

如果您有类似“错误:无法打开服务器文件”/文件“:权限被拒绝”之类的错误,您可以修复它:

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

于 2014-09-04T08:20:25.547 回答
0

postgres (Ubuntu) 的正确脚本是:

COPY (SELECT * FROM tbl) TO '/var/lib/postgres/myfile1.csv';
于 2014-09-04T08:17:06.370 回答