Luc*_*ano 49 postgresql heroku
在Heroku上,我试图使用pgbackups插件将生产数据库复制到我的临时应用程序中.我按照插件页面上的说明操作:https://devcenter.heroku.com/articles/pgbackups
首先我捕获了数据库:
heroku pgbackups:capture --app production-app
Run Code Online (Sandbox Code Playgroud)
这有效:
HEROKU_POSTGRESQL_PURPLE (DATABASE_URL) ----backup---> b238
Capturing... done
Storing... done
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在暂存应用程序上恢复它时:
heroku pgbackups:restore DATABASE `heroku pgbackups:url --app production-app` --remote staging
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
DATABASE_URL does not match any of your databases
! Could not resolve database DATABASE
!
! Available databases:
Run Code Online (Sandbox Code Playgroud)
我也尝试输入完整的URL:
heroku pgbackups:url b238 --app production-app
heroku pgbackups:restore DATABASE "https://s3.amazonaws.com/..." --remote staging
Run Code Online (Sandbox Code Playgroud)
并尝试命名应用程序(而不是--remote staging):
heroku pgbackups:restore DATABASE `heroku pgbackups:url --app production-app` --app staging-app
Run Code Online (Sandbox Code Playgroud)
这些都没有奏效.有趣的是,错误消息显示没有"可用数据库".我假设它指的是临时应用程序,它确实是空的.如果我输入:
heroku pgbackups
Run Code Online (Sandbox Code Playgroud)
我明白了:
! No backups. Capture one with `heroku pgbackups:capture`.
Run Code Online (Sandbox Code Playgroud)
要查找可用的备份(生产),我需要输入:
heroku pgbackups --app production-app
Run Code Online (Sandbox Code Playgroud)
我得到了当前备份列表.我不知道这是否正常,或者即使它与问题有关,但我想我应该提一下.
我已阅读并尝试了所有答案,但没有任何效果.有任何想法吗?
Luc*_*son 84
2017年中期的更新(窃取Takehiro Mouri的回答 - 简化DATABSE_NAME部分)
2015年中期更新......
pgbackups附加组件已被弃用.没有了pgbackups:transfer.
要将数据库从yourapp复制到yourapp_staging:
# turn off the web dynos in staging
heroku maintenance:on -a yourapp-staging
# if you have non-web-dynos, do them too
heroku ps:scale worker=0 -a yourapp-staging
# backup the staging database if you are paranoid like me (optional)
heroku pg:backups capture -a yourapp-staging
# execute the copy
heroku pg:copy your-app::DATABASE_URL DATABASE_URL -a yourapp-staging
Run Code Online (Sandbox Code Playgroud)
然后,当它完成后,重新启动升级:
# this is if you have workers, change '1' to whatever
heroku ps:scale worker=1 -a yourapp-staging
heroku maintenance:off -a yourapp-staging
Run Code Online (Sandbox Code Playgroud)
(来源:https://devcenter.heroku.com/articles/upgrading-heroku-postgres-databases#upgrade-with-pg-copy-default)
Tak*_*uri 20
更新:您可以运行此命令将数据库从生产转移到暂存:
heroku pg:copy your-app::DATABASE_URL DATABASE_URL -a yourapp-staging
它将提示您确认操作,一旦完成,将迁移所有数据.
Jon*_*son 15
更新:这不再有效.请参阅下面的@ lucas-nelson的答案.
所以事情现在变得更加容易了.结帐转移命令作为pgbackups的一部分
heroku pgbackups:transfer HEROKU_POSTGRESQL_PINK sushi-staging::HEROKU_POSTGRESQL_OLIVE -a sushi
Run Code Online (Sandbox Code Playgroud)
这对我将生产代码带回我的临时站点非常有效.
小智 12
使用Heroku的附加附件和分叉,这是一个简单而安全的解决方案.它不需要备份,不需要停机,也不会覆盖任何数据库.
您需要先将生产数据库附加到暂存应用程序,然后在暂存应用程序上分叉.如果你在生产应用程序上分叉,然后连接到临时应用程序,结算应用程序将是生产应用程序,你将无法从它分离分叉.
1.首先找出生产数据库的附加名称(现在是postgres-prod-123):
$ heroku addons --app myapp-production
heroku-postgresql (postgresql-prod-123) standard-0 $50/month
?? as DATABASE
Run Code Online (Sandbox Code Playgroud)
2.然后将生产数据库加载项附加到您的临时应用程序.给它一个名称PRODUCTION_DB,以便于识别:
$ heroku addons:attach postgresql-prod-123 --app myapp-staging --as PRODUCTION_DB
Run Code Online (Sandbox Code Playgroud)
3.然后在登台应用程序上创建生产数据库的分支:
$ heroku addons:create heroku-postgresql:standard-0 --fork PRODUCTION_DB_URL --as STAGING_DB --app myapp-staging
Run Code Online (Sandbox Code Playgroud)
4.最后将fork升级为您的临时应用程序的主数据库:
$ heroku pg:promote STAGING_DB --app myapp-staging
Run Code Online (Sandbox Code Playgroud)
完成!您的暂存应用程序现在正在使用生产数据库的副本.请注意,您之前的临时数据库仍然存在,您可能希望在确保一切正常后将其销毁.
要清理,请从暂存应用程序中分离生产数据库:
$ heroku addons:detach postgresql-prod-123 --app myapp-staging
Run Code Online (Sandbox Code Playgroud)
这对我有用:
heroku pg:copy you-app-production::DATABASE DATABASE -a you-app-staging
您可以使用以下命令来执行此操作
heroku pg:copy <production_app_name>::HEROKU_POSTGRESQL_BLACK_URL OLIVE -a <staging_app_name> --confirm <staging_app_name>
Run Code Online (Sandbox Code Playgroud)