删除应用程序后是否会存在Heroku数据库 - 我可以将其转移到另一个应用程序吗?

cwd*_*cwd 6 postgresql ruby-on-rails heroku

我有一个在Cedar-10堆栈上运行的Heroku应用程序,很快就会被弃用.我正在关注迁移到Celadon Cedar-14堆栈指南,并在新堆栈上创建了我的应用程序实例.但是,这也PostgreSQL自动创建了另一个(空)数据库.

  • 我可以升级到新堆栈但是继续使用现有数据库吗?
  • 当我删除旧堆栈上的应用程序时,它会自动删除与其关联的数据库吗?

我看到数据库URL是在环境变量中设置的$DATABASE_URL- 这是否意味着我可以以某种方式更新它并将旧数据库"链接"到新应用程序?

在搜索有关这方面的信息时,我遇到了heroku pg:copypg:transfer指令,但是当数据库工作正常时复制数据库并且有一个付费的"升级"和已经与之关联的备份似乎很奇怪.

Dre*_*nmi 2

配置变量方法的问题

虽然可以通过将第一个应用程序的配置变量复制到第二个应用程序来在 Heroku 中的两个应用程序之间共享数据库DATABASE_URL,但只有第一个应用程序将具有到数据库的主连接(附加)。

如果删除第一个应用程序,您的数据库将从Heroku 的postgres 仪表板中消失。尽管看起来第二个应用程序仍然能够使用该数据库。(测试于2015年10月25日。)

还值得注意的是:

Heroku 保留根据需要更改数据库 URL 的权利。如果发生这种情况,将导致您的辅助连接失败,您需要相应地更新 URL。

这意味着,如果 Heroku 决定更改数据库的 URL,您的新应用程序将会失败,并且由于该数据库现已从您的仪表板中消失,因此您将无法在不访问 Heroku 的情况下检索新的 URL。(如果有的话。)

这意味着应用程序与其数据库之间存在更内在的联系,而不仅仅是DATABASE_URL,并且将其用作传输机制可能不是最好的主意。


使用 PGBackups 的替代方法

Heroku官方文档建议使用免费的PGBackups插件(老实说,无论如何你都应该运行它)在 Postgres 实例之间传输数据。该工具使用本机pg_dumppg_restore工具。

特别是,您可以使用PG 复制功能,如下所述:

PG 副本使用本机 PostgreSQL 备份和恢复实用程序。然而,它不是将备份写入磁盘,而是通过线路将其直接传输到新数据库上的恢复进程。

它们方便地为您提供了一种使用单个命令在应用程序之间复制数据库的方法,并且不需要任何中间存储:

作为替代方案,您可以在附加到不同应用程序的数据库之间迁移数据。

要将源数据库复制到目标数据库,您需要从目标应用程序调用 pg:copy,引用源数据库。

例子:

heroku pg:copy source-application::OLIVE HEROKU_POSTGRESQL_PINK -a target-application
Run Code Online (Sandbox Code Playgroud)

source-application您现有的堆栈和target-application新创建的堆栈在哪里。与您无关,但仍然值得一提的是,target-application数据库中的任何现有数据都将被销毁。

之后,您可能需要在新应用程序中升级数据库,如下所示:

heroku pg:promote HEROKU_POSTGRESQL_PINK
Run Code Online (Sandbox Code Playgroud)