升级到Heroku上的postgres

时间:2012-12-28 23:38:00

标签: heroku postgresql-9.2

将Heroku Postgres生产数据库升级到9.2的建议方法是什么,停机时间最短?可以使用关注者,还是应该采用pgbackups / snapshots路由?

2 个答案:

答案 0 :(得分:18)

logical followers in 9.4之前,您必须转储和恢复(出于Craig所描述的原因)。您可以使用pgbackups:transfer来简化此操作。直接传输比转储和恢复更快,但要知道你不会保留快照。

以下脚本基本上是Heroku的Using PG Backups to Upgrade Heroku Postgres Databases ,并修改了pgbackups:transfer。 (如果您有多个实例,比如一个登台服务器,请在每个Heroku行中添加“-a”或“--remote”以指定哪个服务器。)

# get the pgbackups plugin
heroku plugins:install git://github.com/heroku/heroku-pg-extras.git

# provision new db
heroku addons:add heroku-postgresql:crane --version=9.2

# wait for it to come online, make note of new color
heroku pg:wait

# prevent new data from arriving during dump
heroku ps:scale worker=0 web=0
heroku maintenance:on

# copy over the DB. could take a while.
heroku pgbackups:transfer OLDCOLOR NEWCOLOR

# promote new database as default for DATABASE_URL
heroku pg:promote NEWCOLOR

# start everything back up and test
heroku ps:scale worker=N web=N
heroku maintenance:off
heroku open

# remove old database
heroku addons:remove HEROKU_POSTGRESQL_OLDCOLOR

请注意,如果您比较它们之间的数据大小,由于9.2的效率,新的数据可能会小得多。 (我的9.2大约是9.1的70%。)

答案 1 :(得分:1)

Heroku粉丝,AFAIK,只是PostgreSQL流媒体副本服务器。这意味着您不能在不同版本中使用它们,您必须具有二进制兼容的数据库。

同样的技术应该适用于普通的PostgreSQL,除了你可能无法在Heroku上使用pg_upgrade。这需要shell(ssh等)作为托管数据库的系统上的postgres用户进行访问,因此我怀疑Heroku是否可以,除非他们提供了一个工具来为您运行pg_upgrade。我找不到太多关于此的信息。

除非您能找到在Heroku数据库实例上运行pg_upgrade的方法,否则您可能不得不考虑使用Slony-I,Bucardo或其他基于触发器的复制解决方案进行升级。一般的想法是你设置一个新的9.2实例,使用Slony将9.1实例中的数据克隆到它中,然后一旦它们完全同步你停止9.1实例,删除Slony触发器,并将客户端切换到9.2实例。

搜索有关“postgresql低停机升级时间”的更多信息,请参阅如何使用。