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

Gho*_*man 22 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"';
Run Code Online (Sandbox Code Playgroud)

Erw*_*ter 37

Unix样式文件名的示例:

COPY (SELECT * FROM tbl) TO '/var/lib/postgres/myfile1.csv' format csv;
Run Code Online (Sandbox Code Playgroud)

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

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

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);
Run Code Online (Sandbox Code Playgroud)

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

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

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

密切相关的答案:

MySQL的类似解决方案:

  • @ sanre6:永远记住`COPY`处理*server*本地的文件.如果您的客户端位于不同的计算机上,请使用**psql**客户端的元命令`\ copy`或**pgAdmin**等其他工具. (3认同)

Rev*_*l89 6

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

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

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


小智 5

这对我有用:

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

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