在PostgreSQL上将表导出为CSV

15

当我不是超级用户并且无法使用copy命令时,如何在Postgres中将表导出为.csv

我仍然可以通过右键单击上的“导入”按钮将数据导入到Postgres中,但没有导出选项。


1
Postgres没有“导入”按钮。您使用哪个SQL客户端工具?在psql中,您可以使用\copy代替copy(将文件写入客户端而不是服务器),其他SQL工具具有其他功能。 - user330315
1
我正在使用Pgadmin的SQL工具。导入按钮在pgadmin中的表名上右键单击即可。你推荐哪个工具? - Luba Weissmann
5个回答

37

使用 psql 并将流重定向到文件:

psql -U <USER> -d <DB_NAME> -c "COPY <YOUR_TABLE> TO stdout DELIMITER ',' CSV HEADER;" > file.csv

谢谢!你怎么用引号指定<YOUR_TABLE>?(我有一个名为user的表,通常我要写成"user") - stallingOne

3
COPY your_table TO '/path/to/your/file.csv' DELIMITER ',' CSV HEADER;

更多详细信息请参考此手册

1
由于服务器上的权限问题,非超级用户无法使用此功能(您需要直接访问Postgres服务器的文件系统才能检索文件)。 - user330315
谢谢,但是对于我的情况来说,标准输入/输出并不是一个好的选择,因为我要处理很多行数据。 - Luba Weissmann

2
除了marvinorez在他的答案中提到的建议外,您还可以从psql中执行以下操作:
\copy your_table TO '/path/to/your/file.csv' DELIMITER ',' CSV HEADER

另一方面,从pgadmin3中,您也可以通过右键单击表名并选择查看数据来打开表。然后,您可以单击表的左上角(列名行与行号列相交的灰色空白方块)以选择所有行。最后,您可以使用CtrlC或菜单中的编辑 -> 复制进行复制。数据将以csv格式复制到剪贴板中,以分号;为分隔符。 然后,您可以将其粘贴到LibreOffice Calc、MS Excel等软件中进行显示。
如果您的表很大(“大”取决于您机器的RAM数量等因素),它可能无法适应剪贴板。在这种情况下,我建议使用第一种方法(\copy)。

0

我在使用超级用户和运行psql时遇到了问题,于是我采用了使用PGAdmin III的简单愚蠢方法。
1)SELECT * FROM ;
在运行选择查询之前,在菜单栏中选择“查询到文件”。 这将保存到您选择的文件夹中。可能需要调整导出设置,它喜欢引用和分号。

2)SELECT * FROM ;
正常运行然后通过选择文件菜单中的导出来保存输出。这将保存为 .csv 文件

对于大型表格,这并不是一个好方法。我尝试过几个拥有几十万行和10-30列的表格,但大表格可能会遇到问题。


0
最简单的方法是将COPY到stdout。如果您无法执行此操作,那么使用pg_dump,然后使用sed,AWK或文本编辑器转换输出文件如何?这应该可以在可接受的时间内处理搜索和替换 :)

Draugr,谢谢您的回答,但是sdtout不是一个好选择 - 我有太多行要导出(超过10万行)。您能否提供有关“pg_dump”选项的更详细说明? - Luba Weissmann
当然,可以查看http://www.postgresql.org/docs/9.3/static/app-pgdump.html上的文档。只需使用它来转储表并查看结果即可。您很快就会看到如何编辑它,以便仅包含数据行。如果有许多行,则确实应该使用sed或awk进行处理,我经常用它来完成这些任务。 - Draugr

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