我一直在应用程序中使用Heroku共享数据库一段时间,我想升级到新的Basic / Crane / etc。生产等级数据库。但是,我没有看到明确的道路。
我看到的选项是:
我可以使用db:pull / db:push将数据/模式从当前生产数据库迁移到新数据库。我可以进入维护模式,移动数据,然后更新配置以指向新数据库。并不可怕,但我担心共享数据库中的旧架构不兼容v9?也许我错了。这也可能需要很长时间才能导致一些重大停机。不酷。
使用pg:backups创建备份,并使用heroku pg:restore移动数据。我再次担心相同的架构问题,但这会更快。
从Basic / Crane数据库开始,并使用他们的追随者概念。这感觉就像是正确的方法,但我不知道这是否适用于共享数据库。如果是的话,我不明白如何。
我认为所有这些选项都需要我在某些时候升级到postgres v9,因为所有新数据库都是v9。有没有办法在共享环境中执行此操作,然后迁移可能会减少痛苦...也许。
有任何想法或建议吗?
答案 0 :(得分:2)
他们的Migrating Between Databases文档指出,当您使用共享实例时,使用Followers进行快速切换的选项(3)不起作用。你应该在这里做的是使用pg:backups来建立第二个数据库来测试你的应用程序并确认新数据库在那里正确行动。如果可行,请打开维护模式并再次进行实际迁移。
PostgreSQL 8.4和9.1之间的架构级别不兼容问题很少。该迁移文档警告其中一个,Bytea更改。如果你正在使用Bytea,你可能知道它;这并不常见。这些版本之间的大多数其他更改也是您不太可能使用的功能,例如PostgreSQL 9.0中的PL/pgSQL modifications。同样,如果您正在使用PL / pgSQL服务器端函数,您可能也会知道,并且Heroku上的大多数人都不知道。
答案 1 :(得分:1)
不要猜测您的数据库是否兼容,请测试。您可以在本地运行PostgreSQL的多个副本,它们只需要配置不同的数据目录和端口。这样你可以随意测试9.1和8.4。
你通常使用9.1中的pg_dump转储8.4数据库 - pg_dump知道旧版本,但不是更新(显然)。
除非你在数据库中做了一些不寻常的事情(大概不是,因为你是在Heroku上),所以在版本之间转储+恢复不太可能有任何问题。