>我可以升级到新堆栈但是继续使用现有数据库吗?
>当我删除旧堆栈上的应用程序时,它是否会自动删除与其关联的数据库?
我看到数据库URL是在环境变量$DATABASE_URL中设置的 – 这是否意味着我可以以某种方式更新它并将旧数据库“链接”到新应用程序?
在搜索有关这方面的信息时,我遇到了heroku的pg:copy和pg:transfer指令,但是当它正常工作时复制数据库并且有一个付费的“升级”和已经与之关联的备份似乎很奇怪.
解决方法
虽然通过将第一个应用程序的DATABASE_URL配置变量复制到第二个应用程序可以在Heroku中使用share a database between two applications,但只有第一个应用程序将具有数据库的主连接(附件).
如果删除第一个应用程序,您的数据库将从Heroku的postgres dashboard中消失.虽然看起来第二个应用程序仍然可以使用数据库. (测试于2015-10-25.)
值得注意的是:
Heroku do reserve the right to change database URLs as required. If this occurs,it will cause your secondary connections to fail,and you’ll need to update the URLs accordingly.
这意味着如果Heroku决定更改数据库的URL,您的新应用程序将失败,并且由于数据库现在已从仪表板中消失,因此您将无法在不接近Heroku的情况下检索新URL. (如果有的话.)
这意味着应用程序与其数据库之间存在比仅仅DATABASE_URL更多的内在连接,并且将其用作传输机制可能不是最佳选择.
使用PGBackups的另一种方法
Heroku official documentation建议使用免费的PGBackups附加组件(老实说,你应该总是运行它)来在Postgres实例之间传输数据.该工具使用本机pg_dump和pg_restore工具.
PG copy uses the native Postgresql backup and restore utilities. Instead of writing the backup to a disk however,it streams it over the wire directly to the restore process on the new database.
它们为您提供了一种方法,您可以使用单个命令在应用程序之间复制数据库,而无需任何中间存储:
As an alternative,you can migrate data between databases that are attached to different applications.
To copy the source database to the target database you will need to invoke pg:copy from the target application,referencing a source database.
例:
heroku pg:copy source-application::OLIVE HEROKU_POSTGREsql_PINK -a target-application
source-application是您现有的堆栈,target-application是您新创建的堆栈.与您无关,但仍然值得一提的是,目标应用程序数据库中的任何现有数据都将被销毁.
heroku pg:promote HEROKU_POSTGREsql_PINK