在 postgres 上将表导出到 csv
Posted
技术标签:
【中文标题】在 postgres 上将表导出到 csv【英文标题】:export table to csv on postgres 【发布时间】:2014-01-07 20:13:14 【问题描述】:当我不是超级用户并且无法使用 copy
命令时,如何在 Postgres 中将表导出到 .csv
?
我仍然可以通过右键单击“导入”按钮将数据导入 postgres,但没有导出选项。
【问题讨论】:
Postgres 没有import
按钮。您使用的是哪个 SQL 客户端工具?在psql
中,您可以使用\copy
而不是copy
(将文件写入客户端,而不是服务器),其他SQL 工具还有其他功能。
我正在使用 Pgadmin 的 SQL 工具。并且导入按钮是在pgadmin中的表名上右击。您推荐哪种工具?
【参考方案1】:
我认为最简单的方法确实是复制到标准输出。如果你不能这样做,那么使用 pg_dump 然后用 sed、AWK 甚至文本编辑器转换输出文件怎么样?即使在可接受的时间内进行搜索和替换,这也应该有效:)
【讨论】:
Draugr,感谢您的回答,但 sdtout 不是一个好的选择 - 我要导出的行太多(超过 100K)。您能否为“pg_dump”选项提供更详细的说明? 当然,请查看postgresql.org/docs/9.3/static/app-pgdump.html 的文档。只需使用它转储表格并查看结果即可。您将很快看到您需要如何编辑它,以便您只有数据行。如果你有很多行,你真的应该使用 sed 或 awk 来处理它,我经常用它来处理这些任务。【参考方案2】:COPY your_table TO '/path/to/your/file.csv' DELIMITER ',' CSV HEADER;
更多详情请访问manual
【讨论】:
由于服务器上的权限,不适用于非超级用户(您需要直接访问 Postgres 服务器的文件系统才能检索文件) 谢谢,但在我的情况下,stdin/stdout 不是一个好的选择,只要我要处理很多行。【参考方案3】:使用 psql 并将流重定向到文件:
psql -U <USER> -d <DB_NAME> -c "COPY <YOUR_TABLE> TO stdout DELIMITER ',' CSV HEADER;" > file.csv
【讨论】:
谢谢!以及如何用引号指定除了马维诺雷斯在his answer 中的建议之外,您还可以从psql
执行以下操作:
\copy your_table TO '/path/to/your/file.csv' DELIMITER ',' CSV HEADER
另一方面,从pgadmin3
,您也可以通过右键单击表格名称然后选择查看数据来打开表格。然后您可以单击表格的左上角(列名行与行号列连接的地方,一个灰色的空方块)以选择所有行。最后,您可以使用菜单中的 CtrlC 或 Edit -> Copy 进行复制。数据将以 csv 格式复制到剪贴板,以分号;
分隔。
然后,您可以将其粘贴到 LibreOffice Calc、MS Excel 中进行显示。
如果您的表很大(具体取决于您机器的 RAM 量等),它可能不适合剪贴板,所以在这种情况下,我不会使用这种方法,而是使用第一种方法( \复制)。
【讨论】:
【参考方案5】:我在使用超级用户和运行 psql 时遇到了问题,我采用了使用 PGAdmin III 的简单愚蠢的方法。 1) 选择 * 从 ; 在菜单栏中运行选择查询并选择“查询到文件”之前 这会将其保存到您选择的文件夹中。可能必须玩有关如何导出的设置,它喜欢引用和 ;. 2) 选择 * 从 ; 正常运行,然后通过在“文件”菜单中选择“导出”来保存输出。这将保存为 .csv
这对于大型表来说不是一个好方法。我这样做的表是几 100,000 行和 10-30 列。大表可能有问题。
【讨论】:
以上是关于在 postgres 上将表导出到 csv的主要内容,如果未能解决你的问题,请参考以下文章
DBeaver,从数据库 Postgres,表结构(属性)导出到文件 .txt
如何在 Postgresql 上将表格导出为带有标题的 CSV?