将db从一个heroku应用程序转移到另一个更快

hol*_*den 42 ruby ruby-on-rails heroku

有没有更快的方法将我的生产数据库转移到测试应用程序?

目前我正在使用heroku db:pull我的本地机器,heroku db:push --app testapp但这变得非常耗时.我有一些种子数据,但它不如仅仅使用我的真实数据进行测试那么准确.既然它们都存储在相邻的AWS云中,那么必须有更快的方式来移动数据?

我想过使用heroku包,但是我注意到animate命令已经消失了?

bundles:animate <bundle>     # animate a bundle into a new app 
Run Code Online (Sandbox Code Playgroud)

Zee*_*han 86

在Rails应用程序的登台,测试和生产环境之间迁移数据库是很常见的.并且heroku db:pull/push非常缓慢.到目前为止,我发现的最好方法是使用Heroku PG Backups附件,它是免费的.我按照以下步骤将生产数据库迁移到登台服务器:

1)为production-app db创建备份

heroku pg:backups capture --app production-app
Run Code Online (Sandbox Code Playgroud)

这将从主数据库生成b001备份文件(通常是database.yml中的生产数据库)

2)查看所有备份(可选)

heroku pg:backups --app production-app
Run Code Online (Sandbox Code Playgroud)

3)现在使用pg:backups restore命令从生产服务器上的最后一个备份文件填充登台服务器数据库

heroku pg:backups restore $(heroku pg:backups public-url --app production-app) DATABASE_URL --app staging-app
Run Code Online (Sandbox Code Playgroud)

请记住,还原是一种破坏性操作,它会在将其替换为备份文件的内容之前删除现有数据.

  • 请注意,此过程不会删除并重新创建架构.这意味着如果您在暂存中有额外的表,它们将在还原后仍然存在.如果希望表消失,则需要执行db:schema:load(或其他命令)以重新创建模式. (4认同)

Jon*_*son 14

所以事情现在变得更加容易了.结帐转移命令作为pgbackups的一部分

heroku pgbackups:transfer HEROKU_POSTGRESQL_PINK sushi-staging::HEROKU_POSTGRESQL_OLIVE -a sushi
Run Code Online (Sandbox Code Playgroud)

https://devcenter.heroku.com/articles/upgrading-heroku-postgres-databases#4b-alternative-transfer-data-between-applications

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

  • 是的,但这将破坏原始数据库.我会用pg:copy代替 (3认同)

Luc*_*son 11

2015年中期更新......

pgbackups附加组件已被弃用.没有了pgbackups:transfer.pg:copy是这种情况的理想选择.

yourapp复制数据库(示例数据库名称:HEROKU_POSTGRESQL_PINK_URL到yourapp_staging(示例数据库名称:HEROKU_POSTGRESQL_WHITE_URL)

# 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 to splat over the top of the staging database
heroku pg:copy yourapp::HEROKU_POSTGRESQL_PINK_URL HEROKU_POSTGRESQL_WHITE_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)

提醒:您可以使用heroku pg:info -a yourapp-staging(和yourapp)来获取数据库常量.

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


jel*_*der 11

截至2015年3月11日,正确答案再次发生变化.

heroku pg:backups restore $(heroku pg:backups public-url --app myapp-production) DATABASE_URL --app myapp-staging
Run Code Online (Sandbox Code Playgroud)

请特别注意参数现在public-url.

https://blog.heroku.com/archives/2015/3/11/pgbackups-levels-up


Tom*_*zky 0

psql -h test_host -c 'drop database test_db_name; create database test_db_name;'

pg_dump -h production_host production_db_name | psql -h test_host test_db_name`
Run Code Online (Sandbox Code Playgroud)

production_host这可以在上或上完成test_host——双向有效。