我需要将db从app_1转移到app_2
我在app_1上创建了备份
然后跑了:
heroku pg:backups还原HEROKU_POSTGRESQL_COLOR --app app_2 heroku pgbackups:url --app app_1
HEROKU_POSTGRESQL_COLOR = app_2的数据库网址
然后我得到:
! `pg:backups` is not a heroku command.
! Perhaps you meant `pgbackups`.
! See `heroku help` for a list of available commands.
所以我跑了:
heroku pgbackups:恢复HEROKU_POSTGRESQL_COLOR --app app_2 heroku pgbackups:url --app app_1
然后我得到以下内容:
! WARNING: Destructive Action
! This command will affect the app: app_2
! To proceed, type "app_2" or re-run this command with --confirm app_2
所以我确认:
> app_2
! Please add the pgbackups addon first via:
! heroku addons:add pgbackups
然后我跑了:heroku addons:add pgbackups --app app_2
Adding pgbackups on app_2... failed
! Add-on plan not found.
有没有解决这个问题的方法?任何帮助将不胜感激!
*解决方案*
我最后通过电子邮件发送Heroku,他们建议我需要heroku update; heroku plugins:update
,但heroku update
仅适用于heroku工具带,我已安装了gem。
解决方案:
安装Heroku工具箱here
然后卸载gem:
gem uninstall heroku --all
运行以下内容获取版本,它应输出heroku-toolbelt
,而不是gem,更多信息here
$ heroku --version
heroku-toolbelt/2.39.0 (x86_64-darwin10.8.0) ruby/1.9.3
通过以下方式复制数据库:
heroku pg:backups restore `heroku pgbackups:url --app app_1` HEROKU_POSTGRESQL_COLOR --app app_2
但更好 - 您可以直接从一个数据库复制到另一个数据库而无需备份:
假设app_2数据库网址为:HEROKU_POSTGRESQL_GOLD
heroku pg:copy app_1::DATABASE_URL GOLD -a app_2
这会将主数据库从app_1复制到app_2上的GOLd数据库
答案 0 :(得分:72)
它只有1个命令将数据库从app复制到应用程序,现在你不必备份:
heroku pg:copy app_name_to_copy_from::database_color_to_copy_from database_color_to_copy_to --app app_name_to_copy_to
检查here
答案 1 :(得分:10)
如果你看heroku docs
就说
作为插件的PG备份已被弃用。这些命令作为CLI中Heroku Postgres命名空间的一部分存在。新功能是实时的,可供使用。
因此,您可以使用pgbackups functionality directly
而无需添加任何附加组件
要创建备份,您可以运行
heroku pg:backups capture --app app_name
如果您有多个数据库,那么您可以像这样指定数据库URL
heroku pg:backups capture HEROKU_POSTGRESQL_PINK
要restore from a backup on another app
你可以运行
heroku pg:backups restore b001 DATABASE_URL --app app_name
你可以{/ 3}}
heroku pg:copy DATABASE_URL HEROKU_POSTGRESQL_PINK_URL --app app_name
您还可以通过
在另一个应用上transfer database
heroku pg:backups public-url b001 --app app_name
然后upload your database to a public url and then use that url to import database
通过
heroku pg:backups restore 'https://s3.amazonaws.com/me/items/3H0q/mydb.dump' DATABASE -a app_name
如果您要从一个应用转移到另一个应用,并希望将同一个数据库用于其他应用,那么您可以按照以下步骤操作:
答案 2 :(得分:3)
heroku pg:copy app1_name::HEROKU_POSTGRESQL_ONYX_URL HEROKU_POSTGRESQL_AQUA_URL --app app2_name
第二个数据库网址在app2_name上
答案 3 :(得分:1)
根据网站,插件是折旧的。这可能是失败消息的原因。
作为加载项的备份已被弃用。
由于您的目标是将数据库从一个应用程序移动到另一个应用程序,为什么不尝试下面链接中提到的说明。
https://devcenter.heroku.com/articles/heroku-postgres-backups#direct-database-to-database-copies
答案 4 :(得分:1)
我发现在heroku上使用多个应用程序重用/共享相同资源(在这种情况下为postgres数据库或任何其他允许共享/重用的资源)的简单解决方案正在执行以下操作:
Sample of the extended menu mentioned @ step #4 above!
这就是在应用程序之间共享资源所需的全部内容,因为它会自动更新目标应用程序上的所有相关配置设置。这很方便,因为没有任何附加组件相关的配置变量可以直接编辑,至少从仪表板(没有通过CLI检查)。希望这有助于任何寻找类似事物的人。
答案 5 :(得分:0)
我有一个相关的问题。您可以将备份保存到本地计算机,然后将其上传到某些托管,例如amazon s3,并从给定的URL导入。 这个问题和以下答案可能会对您有所帮助:Can't import to heroku postgres database from dump
答案 6 :(得分:0)
您可能会发现有用的pgAdmin III(http://pgadmin.org/),这是一个专门用于执行这些类型任务的免费数据库管理工具。您可以直接编辑/查看/导入/导出Heroku数据库。如果您在设置方面需要帮助,请告诉我。 (它就像MySQL Workbench,但对于PostgreSQL而言)。
答案 7 :(得分:0)
简单的方法通常涉及使用备份/还原方法(包括pg:copy
,这是将数据直接流式传输到pg_restore
进程的备份),但是这些方法在创建新数据库时很慢因为您正在还原表的逻辑定义,加载数据并在数据上创建索引。
这是很多工作,而对于我的30GB standard-2数据库,它可能要花几个小时。
执行此操作的快速方法是在要用于数据(例如测试)的应用程序上设置要复制(例如生产)数据库的跟随者。在同样需要30个小时才能恢复的30GB数据库上,最后一次花费了大约15分钟。
我使用的方法是:
# Get the name of the source database addon (e.g. postgresql-clean-12345)
heroku pg:info -a production-app
# Create a follower on the destination app (choose your own plan)
# You create the follower on the new app because otherwise it is
# perpetually associated with the source as it's "billing app"
heroku addons:create heroku-postgresql:standard-2 --follow postgresql-clean-12345 -a test-app
heroku pg:wait -a test-app
# Quiesce the destination app
heroku scale web=0 worker=0 -a test-app
heroku maintenance:on -a test-app
# Get the colour of the new database (e.g. HEROKU_POSTGRESQL_GRAY_URL)
heroku pg:info -a test-app
# Unfollow the source database.
# If you want to upgrade the database, do that now instead of the
# unfollow.
heroku pg:unfollow HEROKU_POSTGRESQL_GRAY_URL -a test-app
# Promote the new database on the destination app
heroku pg:promote HEROKU_POSTGRESQL_GRAY_URL -a test-app
# Get the colour of the old database, if any(e.g. HEROKU_POSTGRESQL_MAROON_URL)
heroku pg:info -a test-app
# Destroy the old database (if any)
heroku addons:destroy HEROKU_POSTGRESQL_MAROON_URL -a test-app
# Bring the test app back up
heroku scale web=1 worker=1 -a test-app
heroku maintenance:off -a test-app
我相信,在创建关注者时,Heroku通过复制数据文件或从物理(文件)备份还原来创建新数据库,然后重播日志以使其保持最新状态。
答案 8 :(得分:0)
我需要一些稍微不同的东西,所以在这里分享:
heroku pg:copy name_of_app_being_copied::DATABASE_URL DATABASE_URL --app name_of_app_being_copied_to
注意: 不需要更改对 DATABASE_URL 的两个引用。这可能看起来很奇怪,但第一个实例引用了被复制的应用程序的数据库 URL,第二个引用了被复制到的应用程序的数据库 URL。