我的数据库托管在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数据库中?
答案 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
一样简单。