2012-07-29 58 views
3

我一直在应用程序中使用Heroku的共享数据库一段时间,我想升级到他们的新的基本/起重机/等。生产级数据库。然而,我并没有看到明确的路径来做到这一点。有没有办法从Heroku共享数据库升级到Basic或Crane等生产级数据库?

,因为我看到他们的选项有:

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

  2. 使用pg:备份创建备份,并使用heroku pg:restore来移动数据。我再次担心同样的模式问题,但这会更快。

  3. 从基本/起重机数据库开始,并使用他们的追随者概念。这感觉就像是正确的做法,但我不知道这是否适用于共享数据库。如果是这样,我不明白如何。

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

任何想法或建议吗?

回答

1

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

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

除非你对数据库做了一些不寻常的事情(大概不是,因为你是在Heroku上),那么在版本之间就不会有任何问题了。

2

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

PostgreSQL 8.4和9.1之间的模式级别不兼容问题很少。该移民文件警告其中的一个,即Bytea的变化。如果你使用Bytea,你可能知道它;这并不常见。这些版本之间的其他大部分更改都是您不太可能使用的功能,例如PostgreSQL 9.0中创建的PL/pgSQL modifications。同样,如果你使用PL/pgSQL服务器端函数,你也可能知道这一点,Heroku上的大多数人都不知道。

相关问题