【问题标题】:Does Heroku pgbackups:restore rebuild the database or just repopulate it?Heroku pgbackups:restore 是重建数据库还是只是重新填充它?
【发布时间】:2015-08-05 20:21:38
【问题描述】:

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

我的登台服务器已经领先于我的生产服务器,迁移创建了一个额外的表。我现在想试运行迁移以将该表添加到生产数据库中,因此我想恢复我的暂存数据库以执行此操作。

问题在于,每次我将临时数据库restore 转移到生产数据库时,表都会出现问题。我原以为数据库会被销毁并重新填充,但它似乎只是在重新填充。

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

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

每次我这样做时,我都会发现“较新”的表仍然存在。

pgbackups:restore 是否真的恢复表结构或只是恢复数据 - 这里发生了什么?

【问题讨论】:

    标签: ruby-on-rails heroku


    【解决方案1】:

    恢复是简单的 Postgres 恢复,因此本质上是数据的脚本版本。

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

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

    【讨论】:

    • 这是正确的。它目前只删除备份在恢复备份之前知道的关系。
    • 太棒了,真是一种享受。我之前在做heroku db:reset,那是我认为只是截断表格
    • "不支持 rake db:reset 任务。Heroku 应用没有删除和创建数据库的权限。请改用 heroku pg:reset 命令。"参考:devcenter.heroku.com/articles/rake
    【解决方案2】:

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

    对于完整的数据库恢复(更改 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
    

    希望有帮助。

    【讨论】:

      猜你喜欢
      • 2019-07-23
      • 1970-01-01
      • 2014-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-28
      相关资源
      最近更新 更多