Heroku pgbackups:恢复重建数据库还是只重新填充它?

时间:2012-02-05 19:49:35

标签: ruby-on-rails heroku

我正在尝试将Heroku上的生产数据库复制到我的登台服务器。

我的临时服务器已经领先于我的生产服务器,并且迁移会创建一个额外的表。我现在想干运行迁移以在生产数据库上添加该表,因此希望恢复我的暂存数据库以便这样做。

问题在于,每当我restore临时数据库到生产者时,表格都会粘在上面。我期待数据库被销毁和重新填充,但它似乎只是被重新填充。

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

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

每次我这样做,我发现“更新”的表格仍然存在。

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

2 个答案:

答案 0 :(得分:11)

还原是一种简单的Postgres还原,因此基本上是数据的脚本版本。

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

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

答案 1 :(得分:4)

正如neil所说,pgbackups:restore只会移动数据并且不会改变实际的db结构。

进行完整的数据库恢复(更改app-production,app-staging和migration_number以适合您的应用):

首先,从您的作品中获取当前的迁移。

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

重置登台数据库(当然,如果需要,可以备份)

heroku pg:reset DATABASE_URL --confirm app-staging

运行迁移,直到migration_number适合生产数据库结构

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
希望有所帮助。