如何使用pgbackups将生产数据库传输到Heroku上的暂存?得到错误

时间:2012-05-20 13:01:38

标签: postgresql heroku

在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

我获得了当前备份列表。我不知道这是否正常,或者即使它与问题有关,但我想我应该提一下。

我已阅读并尝试了所有答案,但没有任何效果。有什么想法吗?

12 个答案:

答案 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

(来源:https://devcenter.heroku.com/articles/upgrading-heroku-postgres-databases#upgrade-with-pg-copy-default

答案 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

https://devcenter.heroku.com/articles/upgrade-heroku-postgres-with-pgbackups#transfering-databases-between-heroku-applications

这对我将生产代码带回我的临时站点非常有效。

答案 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) 我做了以下(疲倦的帮助)

  1. 登录Heroku数据库控制台

  2. 登录登台&gt; 'settings'&gt; PGRestore&gt;将“连接设置”复制到文本文件中。

  3. 登录制作&gt;快照,按“+”进行新的备份。然后按下载。下载 进入apps / tmp文件夹或你想要的。

  4. 将登台设置为维护模式

    $ heroku maintenance:on

  5. 运行命令,如下所示,最后使用连接设置文本和转储文件:PGPASSWORD = {...这里的东西...} -p 5432'tmp / b048.dump.dump'< / p>

  6. 运行后:

    $ heroku maintenance:off

  7. 登录登台并检查事情是否匹配。 如果可以,请查找您知道正在生产的最近交易。 $ heroku运行控制台,用于应用和检查ID匹配。

答案 10 :(得分:0)

我认为它不是 - 远程--app的尝试:

heroku pgbackups:restore DATABASE `heroku pgbackups:url --app production-app` --app staging-app

答案 11 :(得分:0)

这对我有用

  • 从heroku控制台下载备份并将其上传到s3。
  • heroku pg:backups restore 'DUMP_FILE_URL_FROM_S3' DATABASE --app MY_APP