我正在尝试将Heroku上的生产数据库复制到我的登台服务器。
我的临时服务器已经领先于我的生产服务器,并且迁移会创建一个额外的表。我现在想干运行迁移以在生产数据库上添加该表,因此希望恢复我的暂存数据库以便这样做。
问题在于,每当我restore
临时数据库到生产者时,表格都会粘在上面。我期待数据库被销毁和重新填充,但它似乎只是被重新填充。
heroku pgbackups:url b104 --app production
# 'http://s3.amazonaws.com/...'
heroku pgbackups:restore DATABASE 'http://s3.amazonaws.com/...' --app staging
每次我这样做,我发现“更新”的表格仍然存在。
pgbackups:restore
实际上是恢复表格结构还是仅仅是数据 - 这里发生了什么?
答案 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
希望有所帮助。