将Heroku Postgres生产数据库升级到9.2的建议方法是什么,停机时间最短?可以使用关注者,还是应该采用pgbackups / snapshots路由?
答案 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低停机升级时间”的更多信息,请参阅如何使用。