2012-02-05 74 views
8

我试图将Heroku上的生产数据库复制到我的临时服务器上。Heroku pgbackups:恢复重建数据库还是重新填充它?

我的登台服务器已经在我的生产服务器之前进行迁移,创建一个额外的表。我现在想干运行迁移以在生产数据库上添加该表,因此想要恢复我的登台数据库以便这样做。

问题是我每次把restore的升级数据库都放到了生产的桌子上。我期待数据库被销毁并重新填充,但它似乎只是被重新填充。

heroku pgbackups:url b104 --app production 
# 'http://s3.amazonaws.com/...' 

heroku pgbackups:restore DATABASE 'http://s3.amazonaws.com/...' --app staging 

每当我这样做,我发现“新”表仍然存在。

pgbackups:restore实际上是恢复表结构还是简单的数据 - 这里发生了什么?

回答

11

恢复是一个简单的Postgres恢复,所以基本上是您的数据的脚本版本。

为了做到这一点,你需要先核弹攻击你的数据库,然后从数据库脚本重建它:

heroku pg:reset 
heroku pgbackups:restore blah... 
+0

这是正确的。它目前仅在恢复备份之前删除备份知道的关系。 – Will 2012-02-05 21:01:35

+0

辉煌,那工作的一种享受。我之前正在执行'heroku db:reset',那是我认为简单地截断了表格 – 2012-02-05 21:13:46

+1

“不支持rake db:reset任务。Heroku应用程序没有权限删除和创建数据库。使用heroku pg:reset命令“。 ref:http://devcenter.heroku.com/articles/rake – Magne 2012-03-12 13:28:05

4

尼尔表示,pgbackups:只恢复移动数据并没有改变实际的数据库结构。

完全恢复数据库(更改应用,生产,应用,分期和migration_number以满足您的应用程序):

首先,从你的生产当前迁移。

heroku run rake db:version --app app-production 

复位分期分贝(当然,备份,如果需要的话)

heroku pg:reset DATABASE_URL --confirm app-staging 

运行迁移,直到migration_number,以适应生产DB结构

heroku run rake db:migrate VERSION=current_migration_number --app app-staging 

捕获生产应用

heroku pgbackups:capture --app app-production 

的数据推到分段应用

编辑 - 如果你正在使用Heroku的工具区,语法模式 已经从pgbackups:action_name现在改为pg:backups action_name

heroku pgbackups:restore DATABASE "heroku pgbackups:url --app app-production" --app app-staging 

分期分贝应匹配生产数据和结构

heroku run rake db:migrate --app app-staging 

希望有所帮助。