【问题标题】:How to export all tables in a PostgreSQL database to csv files?如何将 PostgreSQL 数据库中的所有表导出为 csv 文件?
【发布时间】:2018-03-27 14:18:15
【问题描述】:

我进入了 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 按钮确保我始终引用正确的表名。

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

我做错了吗?

编辑:我应该澄清一下,我正在通过在服务器计算机上使用 putty 和 WINSCP 来查找该目录。我在其中运行 psql 命令的位置相同。

【问题讨论】:

  • 没有错误信息?通常这个命令应该这样做:COPY table TO '/tmp/table.csv' DELIMITER ',' CSV HEADER 另外,请确保您没有在客户端计算机中查看 /var/lib/ ;-) 为了让您使用 COPY 在客户端中拥有文件,您必须使用标准输出。让我知道它是否是您正在寻找的。​​span>
  • 使用这种方法你会得到什么? $ psql yourdb -c "COPY yourtable TO STDOUT DELIMITER ',' CSV HEADER" > output.csv

标签: postgresql export-to-csv


【解决方案1】:

文件被写入服务器机器上的那个目录,而不是客户端。

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

【讨论】:

  • 我更新了问题。我将文件夹创建到我连接到的同一台机器上,并在其中运行 psql 命令。
  • 那我的答案没有命中,我会删除它。您所描述的不会发生(除非发生某些事情并删除了文件)。这是吞下文件的奇怪文件系统吗?
【解决方案2】:

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

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

如果您想知道如何反其道而行之(导入),请查看此question

【讨论】:

    【解决方案3】:

    假设您真正想做的是将文件输出到本地机器上的某个地方(即您的开发人员工作站),我建议您使用“\copy em>”命令,而不是“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 “命令将检查您是否有权将文件写入实际的数据库服务器。通常,这不是您的行为,而且它需要的访问权限和权限比大多数开发人员都高。

    【讨论】:

      猜你喜欢
      • 2021-10-20
      • 2019-05-15
      • 2018-05-02
      • 2017-10-16
      • 2016-10-17
      • 2018-09-05
      • 2013-07-02
      • 2015-07-19
      • 1970-01-01
      相关资源
      最近更新 更多