Postgres:将多个 COPY TO 输出组合到一个 postgres 可导入文件

Postgres: Combining multiple COPY TO outputs to a postgres-importable file

我的数据库托管在 heroku 上,我想下载数据库的特定部分(例如,所有 id > x 来自 table 1 的行,所有 name = x 来自 [=11 的行=], 等) 在一个文件中。

根据一些研究和提问 看来某种修改 pg_dump 可以解决我的问题。但是,我将无法使用 pg_dump 因为我无法访问命令行(基本上我希望能够在我的网络应用程序中单击一个按钮,它将生成并下载数据库文件).

所以我的新策略是使用 postgres copy 命令。我将浏览我的服务器数据库 运行 COPY (Select * FROM ... WHERE ...) TO filename 中的各种表,其中 filename 只是我将在完成后下载的临时文件。

问题是这个 filename 文件只有行,所以我不能转身将它导入 pgadmin。假设我设置了一个 'empty' 数据库(架构、索引和其他东西都已经设置好了),有没有一种方法可以格式化我的 filename 文件,以便它可以很容易地导入到后数据库?

基于我对 to/from stdout/stdin 的评论,并回答有关在一个文件中包含多个 table 的实际问题;您可以构造输出文件以将 copy ... from stdin 与实际数据交错并通过 psql 加载它。例如,psql 将支持如下所示的输入文件:

copy my_table (col1, col2, col3) from stdin;
foo    bar    baz
fizz   buzz   bizz
\.

(注意尾部 \. 并且分隔符应该是制表符;您也可以在复制命令中指定 delimiter 选项)。

psql 将处理 ';' 之间的所有内容和 '。'作为标准输入。这实质上模拟了当您导出 table 数据且没有模式(例如 pg_dump -a -t my_table)时 pg_dump 所做的事情。

生成的负载可以像 psql mydb < output.dump.

一样简单