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

时间:2015-05-27 06:02:33

标签: postgresql heroku import copy export

我的数据库托管在heroku上,我想下载数据库的特定部分(例如author.getBooks()中id为> x的所有行,table 1中名称= x的所有行等等。)在一个文件中。

从一些研究中提出问题here,似乎某种修改过的pg_dump可以解决我的问题。但是,我将无法使用pg_dump,因为我无法访问命令行(基本上我希望能够单击我的Web应用程序中的按钮,它将生成+下载数据库文件)。

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

问题是这个filename文件只有行,所以我不能只是转身将其导入pgadmin。假设我有一个'空'数据库设置(模式,索引和东西都已设置),有没有办法我可以格式化我的filename文件,以便它可以很容易地导入到postgres数据库中?

1 个答案:

答案 0 :(得分:0)

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

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

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

psql会处理';'之间的所有内容和'。'作为标准。这基本上模拟了pg_dump在导出表数据时没有执行的操作(例如,pg_dump -a -t my_table)。

产生的负载可能与psql mydb < output.dump一样简单。