PostgreSQL:将数据导出到 csv 文件

Posted

技术标签:

【中文标题】PostgreSQL:将数据导出到 csv 文件【英文标题】:PostgreSQL: export data to csv file 【发布时间】:2017-10-16 19:19:51 【问题描述】:

我想将某个 PostgreSQL 数据库表中的数据导出到 csv 文件。 由于标准复制命令不起作用,我尝试了以下方法:

\copy (SELECT * FROM persons) to 'C:\tmp\persons_client.csv' with csv

就像在 http://www.postgresqltutorial.com/export-postgresql-table-to-csv-file/ 。 路径似乎是正确的;但是,我收到错误消息

FEHLER:  Syntaxfehler bei »\«
LINE 1: \copy [...]

表示复制语句前的“\”符号处有语法错误。 有什么我错过的想法吗?

顺便说一句,这不是我目前面临的真正问题。 实际上我试图导入一个 csv 文件,但不幸的是我似乎没有足够的权限,当只使用“COPY”时,权限将被拒绝。所以我尝试使用“\copy”导入文件,但在尝试使用“\copy”导出时仍然收到相同的错误消息。

【问题讨论】:

你必须在psql 中运行它——它是这个特定的客户端元命令,而不是一个 sql 我必须这样做吗?我正在使用 pgAdmin 4。如果我仍然必须在 psql 中运行它,我究竟需要改变什么? `psql -c "\copy (SELECT * FROM people) to 'C:\tmp\persons_client.csv' with csv" 应该可以完美工作,并且 pgadmin 在某处有自己的保存到 csv 的功能 问题是,为了将来的目的,我将不得不自动导入/导出大量手动无法完成的文件^^ 另一个使用 psql,而不是 pgadmin 的参数 【参考方案1】:

\copy (SELECT * FROM persons) to 'C:\tmp\persons_client.csv' with csv 在 pgAdmin 中不起作用,因为 \copy 是 pslq metacommand:

执行前端(客户端)复制。这是一个运行 SQL COPY 命令,而不是服务器读取或写入 指定文件,psql读取或写入文件并路由数据 服务器和本地文件系统之间。这意味着该文件 可访问性和权限是本地用户的,而不是 服务器,并且不需要 SQL 超级用户权限。

【讨论】:

我可以做些什么来使用 pgAdmin 实现我的目标? question-defense.com/2010/10/15/… 请一次提出一个问题。请不要将 cmets 用于在线帮助热线 好吧,这对我没有帮助。我已经想出了如何手动将表导出到 csv。但我想一次做不止一个...... 只是从 pgadmin 迁移到 psql 的另一个原因。你可以坐在两个欢呼 - pgadmin 友好手动查询,psql 轻松 cronned【参考方案2】:

PgAdminpsql 上发出此命令:

COPY (SELECT * FROM persons) to 'C:\\tmp\\persons_client.csv' with csv;

不要忘记转义 Windows 文件分隔符。

【讨论】:

"错误,无法打开文件 'persons_client.csv' 进行写入" ... :-( 您必须确保您的路径存在(在您的情况下为tmp 文件夹)并且是可写的。 @frau_tana 请看这个answer。 另一个重点:你的服务器是远程的?如果是,您将无法以这种方式进行复制,因为它会尝试访问服务器上的C:\\tmp\\persons_client.csv。在这种情况下,您必须使用stdout 写入本地文件。【参考方案3】:
\COPY (SELECT * FROM persons) to 'persons_client.csv' with csv;

【讨论】:

请简要说明你的答案

以上是关于PostgreSQL:将数据导出到 csv 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将表数据从 PostgreSQL (pgAdmin) 导出到 CSV 文件?

如何将 PostgreSQL 查询输出导出到 csv 文件

将文本表的数据导出为 .csv (Tableau)

如何在 Datagrip 中使用 PostgreSQL 查询导出附加 CSV 文件?

在 JDBC 中将 postgresql 表导出为 CSV 的问题

Greenplum,是不是可以将 CSV 导出到远程服务器?