如何将PostgreSQL数据库中的所有表导出到csv文件?

时间:2018-03-27 14:18:16

标签: postgresql export-to-csv

我进入psql命令行模式并输入了正确的数据库,我可以列出所有表格。

现在,我尝试了以下命令:

copy some_table_name1 to '/var/lib/pgsql/csv_exports/some_table_name1.csv' csv header
copy some_table_name2 to '/var/lib/pgsql/csv_exports/some_table_name2.csv' csv header

等等......

命令后没有错误消息或任何内容,我使用tab-button来确保我总是引用正确的表名。

对所有表执行此操作后,我转到目录,根本没有文件。

我做错了吗?

编辑:我应该澄清一下,我在服务器上使用putty和WINSCP来查找该目录。我在运行psql命令的地方也一样。

3 个答案:

答案 0 :(得分:0)

文件将写入服务器计算机上的目录,而不是客户端。

使用COPY ... TO STDOUT将数据发送到客户端。

答案 1 :(得分:0)

在控制台中使用psql,您可以使用以下命令在客户端计算机中获取数据:

$ psql yourdb -c "COPY yourtable TO STDOUT DELIMITER ',' CSV HEADER" > output.csv

如果您想知道如何进行相反的操作(导入),请查看此question

答案 2 :(得分:0)

假设您真正想做的是将文件输出到本地计算机上的某个位置(即您的开发人员工作站),我建议您使用“\copy”命令,而不是“COPY”命令。

psql -c "\copy (SELECT * FROM account) to '/tmp/account.csv' with csv;"

psql -c "\copy account TO '/tmp/account.csv' DELIMITER ',' CSV HEADER;

否则,除非您按照@LaurenzAlbe 的建议将命令明确重定向到 stdout,否则“COPY “命令将检查您是否有权将文件写出到实际的数据库服务器。通常,这不是您所拥有的行为,并且它需要的访问权限和权限比大多数开发人员都多。