在Heroku上,我正在尝试使用pgbackups插件将生产数据库复制到我的临时应用程序中。我按照插件页面上的说明操作:https://devcenter.heroku.com/articles/pgbackups
首先我抓住了数据库:
heroku pgbackups:capture --app production-app
有效:
HEROKU_POSTGRESQL_PURPLE (DATABASE_URL) ----backup---> b238
Capturing... done
Storing... done
但是,当我尝试在暂存应用上恢复它时:
heroku pgbackups:restore DATABASE `heroku pgbackups:url --app production-app` --remote staging
我收到以下错误消息:
DATABASE_URL does not match any of your databases
! Could not resolve database DATABASE
!
! Available databases:
我也尝试输入完整的网址:
heroku pgbackups:url b238 --app production-app
heroku pgbackups:restore DATABASE "https://s3.amazonaws.com/..." --remote staging
并尝试命名应用程序(而不是--remote staging):
heroku pgbackups:restore DATABASE `heroku pgbackups:url --app production-app` --app staging-app
这些都没有奏效。有趣的是,错误消息显示没有“可用数据库”。我假设它指的是临时应用程序,它确实是空的。如果我输入:
heroku pgbackups
我明白了:
! No backups. Capture one with `heroku pgbackups:capture`.
要查找可用的备份(生产),我需要输入:
heroku pgbackups --app production-app
我获得了当前备份列表。我不知道这是否正常,或者即使它与问题有关,但我想我应该提一下。
我已阅读并尝试了所有答案,但没有任何效果。有什么想法吗?
答案 0 :(得分:77)
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
然后,当它完成后,重新开启舞台:
# this is if you have workers, change '1' to whatever
heroku ps:scale worker=1 -a yourapp-staging
heroku maintenance:off -a yourapp-staging
答案 1 :(得分:16)
更新:
您可以运行此命令将数据库从生产转移到暂存:
heroku pg:copy your-app::DATABASE_URL DATABASE_URL -a yourapp-staging
它会提示您确认操作,一旦完成,所有数据都将被迁移。
答案 2 :(得分:15)
更新:这不再有效。请参阅下面的@ lucas-nelson answer。
所以现在事情变得更加容易了。在pgbackups
中检查传输命令heroku pgbackups:transfer HEROKU_POSTGRESQL_PINK sushi-staging::HEROKU_POSTGRESQL_OLIVE -a sushi
这对我将生产代码带回我的临时站点非常有效。
答案 3 :(得分:10)
使用Heroku的附加附件和分叉,这是一个简单而安全的解决方案。它不需要备份,不需要停机,也不会覆盖任何数据库。
您需要先将生产数据库附加到暂存应用程序,然后在临时应用程序上进行分叉。如果您分配生产应用程序,然后附加到暂存应用程序,则结算应用程序将是生产应用程序,你将无法从它分离叉。
1。首先找出生产数据库的附加组件名称(此处为postgres-prod-123
):
$ heroku addons --app myapp-production
heroku-postgresql (postgresql-prod-123) standard-0 $50/month
└─ as DATABASE
2. 然后attach生产数据库加载项到您的登台应用。给它命名为PRODUCTION_DB
,以便于识别:
$ heroku addons:attach postgresql-prod-123 --app myapp-staging --as PRODUCTION_DB
3。然后暂存应用上的生产数据库的create a fork:
$ heroku addons:create heroku-postgresql:standard-0 --fork PRODUCTION_DB_URL --as STAGING_DB --app myapp-staging
4. 最后将fork升级为您的暂存应用的主数据库:
$ heroku pg:promote STAGING_DB --app myapp-staging
完成!您的暂存应用现在正在使用生产数据库的副本。 请注意,您之前的临时数据库仍然存在,您可能希望在确保一切正常后将其销毁。
要清理,请从暂存应用程序中分离生产数据库:
$ heroku addons:detach postgresql-prod-123 --app myapp-staging
答案 4 :(得分:5)
这对我有用:
heroku pg:copy you-app-production::DATABASE DATABASE -a you-app-staging
答案 5 :(得分:1)
我正在努力解决同样的问题。根据{{3}}的答案,问题可能是你的heroku gem版本。我刚刚升级了我的版本(从2.26.2升级到2.26.6),现在它可以正常工作。
答案 6 :(得分:1)
首先创建生产的最新备份:
heroku pgbackups:capture -a productionappslug --expire
找出Heroku为您的数据库命名的颜色。
https://postgres.heroku.com/databases 要么 https://dashboard.heroku.com/apps/STAGINGAPPSLUG/resources
然后将生产数据库备份加载到暂存(将RED更改为您的颜色):
heroku pgbackups:restore HEROKU_POSTGRESQL_RED -a stagingappslug `heroku pgbackups:url -a productionappslug`
stagingappslug 和 liveappslug 是您调用heroku应用程序的短名称。
答案 7 :(得分:1)
将生产数据库(源数据库)传输(复制)到 staging 数据库( target 数据库) )您需要从目标应用程序调用{{1}},引用源数据库。
pg:copy
另一个例子:
heroku pg:copy source-application::OLIVE HEROKU_POSTGRESQL_PINK -a target-application
要获取数据库的颜色名称,请使用:
heroku pg:copy my-production-app::HEROKU_POSTGRESQL_OLIVE HEROKU_POSTGRESQL_PINK --app my-staging-app
请参阅pg:copy
答案 8 :(得分:1)
您可以使用以下命令执行此操作
heroku pg:copy <production_app_name>::HEROKU_POSTGRESQL_BLACK_URL OLIVE -a <staging_app_name> --confirm <staging_app_name>
答案 9 :(得分:0)
没有运气之后。 (我使用heroku gem 2.31.4) 我做了以下(疲倦的帮助)
登录Heroku数据库控制台
登录登台&gt; 'settings'&gt; PGRestore&gt;将“连接设置”复制到文本文件中。
登录制作&gt;快照,按“+”进行新的备份。然后按下载。下载 进入apps / tmp文件夹或你想要的。
将登台设置为维护模式
$ heroku maintenance:on
运行命令,如下所示,最后使用连接设置文本和转储文件:PGPASSWORD = {...这里的东西...} -p 5432'tmp / b048.dump.dump'< / p>
运行后:
$ heroku maintenance:off
登录登台并检查事情是否匹配。 如果可以,请查找您知道正在生产的最近交易。 $ heroku运行控制台,用于应用和检查ID匹配。
答案 10 :(得分:0)
我认为它不是 - 远程--app的尝试:
heroku pgbackups:restore DATABASE `heroku pgbackups:url --app production-app` --app staging-app
答案 11 :(得分:0)
这对我有用
heroku pg:backups restore 'DUMP_FILE_URL_FROM_S3' DATABASE --app MY_APP