3

我已经在应用程序中使用 Heroku 共享数据库一段时间了,我想升级到他们的新 Basic/Crane/etc。生产级数据库。但是,我看不到这样做的明确途径。

我看到的选项是:

  1. 我可以使用 db:pull/db:push 将数据/模式从当前生产数据库迁移到新数据库。我可以进入维护模式,移动数据,然后更新配置以指向新数据库。不可怕,但我担心共享数据库中的旧模式不兼容 v9?也许我错了。这也可能需要很长时间,从而导致一些重大停机时间。不酷。

  2. 使用 pg:backups 创建备份,并使用 heroku pg:restore 移动数据。我再次担心同样的架构问题,但这会快得多。

  3. 从 Basic/Crane 数据库开始,并使用他们的 Followers 概念。这感觉是正确的做法,但我不知道这是否适用于共享数据库。如果是这样,我不明白怎么做。

我觉得所有这些选项都需要我在某个时候升级到 postgres v9,因为所有新数据库都是 v9。有没有办法在共享环境中做到这一点,然后迁移可能会不那么痛苦......也许。

有什么想法或建议吗?

4

2 回答 2

2

他们的Migrating Between Databases文档指出,当您从共享实例开始时,使用 Followers 进行快速转换的选项 (3) 不起作用。您应该在这里做的是使用 pg:backups 创建第二个数据库来测试您的应用程序并确认新数据库在那里正确运行。如果可行,请打开维护模式并再次执行真正的迁移。

PostgreSQL 8.4 和 9.1 之间几乎没有架构级别的不兼容问题。该迁移文档警告其中之一,Bytea 更改。如果您使用的是字节茶,您可能知道;这并不常见。在这些版本之间更改的大多数其他内容也是您不太可能使用的功能,例如在 PostgreSQL 9.0 中进行的PL/pgSQL 修改。同样,如果您使用 PL/pgSQL 服务器端函数,您可能也知道这一点,而 Heroku 上的大多数人都不知道。

于 2012-07-31T00:27:00.920 回答
1

不要猜测您的数据库是否兼容,请测试。您可以在本地运行多个 PostgreSQL 副本,它们只需要配置不同的数据目录和端口。这样您就可以随意针对 9.1 和 8.4 进行测试。

您通常使用 9.1 中的 pg_dump 转储 8.4 数据库 - pg_dump 知道旧版本,但不知道新版本(显然)。

除非你对数据库做了一些不寻常的事情(可能不是,因为你在 Heroku 上),那么在版本之间转储 + 恢复不太可能出现任何问题。

于 2012-07-30T13:43:35.937 回答