如何将PostgreSQL生成的数据导出为.CSV格式?

12

我使用的是 PostgreSQL 9.4.1。

我的查询:

copy(select * from city) to 'C:\\temp\\city.csv'
copy(select * from city) to E'C:\\temp\\city.csv'

错误:不允许使用相对路径将COPY复制到文件中 ********** 错误 **********

错误:不允许使用相对路径将COPY复制到文件中 SQL状态:42602


你是否尝试过使用三个反斜杠(我假设那是笔误)? - Politank-Z
在Windows上使用正斜杠:'C:/temp/city.csv' - user330315
试试将 temp 写成全大写,也许能解决问题。 - Politank-Z
数据库服务器是否在您运行“copy”命令的同一台机器上? - Politank-Z
显示剩余4条评论
4个回答

15

这个案例一样,您似乎正在尝试从托管数据库的计算机之外的计算机使用copycopy仅从数据库主机计算机的本地文件系统执行I/O操作。 如果您可以访问该文件系统,则可以相应地调整您的尝试。否则,您可以在psql中使用\copy命令。


7

我正在使用 pgAdmin v1.5。第一个查询是:

select table_name from information_schema.tables where table_catalog = 'ofbiz' order by table_name

当我点击下载按钮后,pgAdmin会返回一个csv文件,它是第一个查询的结果集。 enter image description here

1

TLDR: 确保您在复制到的位置也具有写入权限!

我遇到了完全相同的第一个错误,ERROR: relative path not allowed for COPY to file,即使我使用了'/tmp/db.csv'(这不是相对路径)。

在我的情况下,错误信息非常误导人,因为我在主机上,使用的是绝对文件路径,而且该位置已经存在。我的问题在于我使用了bitnami postgres:12 docker镜像,在容器中tmp文件夹属于root用户,而postgres和psql使用postgres用户。我的解决方案是在那里创建一个导出文件夹并将所有权转换为postgres用户:

mkdir /tmp/export
chown postgres:postgres /tmp/export

然后我成功地使用了COPY tablename TO '/tmp/export/db.csv';


1

虽然可能有点晚,但我认为这会很有帮助。

  1. 在Windows上,请确保输出目录已经获得了每个人的读/写权限(或者您可以指定用户名)。
  2. 使用斜杠(/)代替反斜杠(\),例如:

COPY DT1111 TO 'D:/TEST/DT1111_POST.CSV' DELIMITER ',' CSV HEADER;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接