plans - actualizando a Postgres en Heroku
heroku postgresql premium 2 (2)
¿Cuál es la forma recomendada de actualizar una base de datos de producción de Heroku Postgres a 9.2 con un tiempo de inactividad mínimo? ¿Es posible usar un seguidor, o deberíamos tomar la ruta de pgbackups / snapshots?
Los seguidores de Heroku son, AFAIK, servidores de réplica de transmisión de PostgreSQL. Esto significa que no puede usarlos en todas las versiones, debe tener bases de datos compatibles con binarios.
Las mismas técnicas se deben aplicar como PostgreSQL ordinario, excepto que no se puede usar pg_upgrade
en Heroku. Esto requiere el acceso de shell (ssh, etc) como usuario de postgres
en el sistema que aloja la base de datos, por lo que dudo que sea posible en Heroku a menos que hayan proporcionado una herramienta para ejecutar pg_upgrade
por usted. No puedo encontrar mucha información sobre esto.
Probablemente tenga que considerar el uso de Slony-I, Bucardo u otra solución de replicación basada en disparadores para realizar la actualización a menos que pueda encontrar una forma de ejecutar pg_upgrade
en una instancia de base de datos Heroku. La idea general es que configure una nueva instancia 9.2, utilice Slony para clonar datos de la instancia 9.1, luego, una vez que estén completamente sincronizados, detenga la instancia 9.1, elimine los disparadores de Slony y cambie los clientes a la 9.2 instancia.
Busque más información sobre "postgresql low downtime upgrade slony", etc., vea cómo funciona.
Hasta los seguidores lógicos en 9.4 , tendrás que volcar y restaurar (por las razones que describe Craig). Puede simplificar esto con pgbackups: transferencia. La transferencia directa es más rápida que el volcado y la restauración, pero sepa que no tendrá una instantánea para guardar.
El siguiente script es básicamente Heroku''s Using PG Backups para actualizar las bases de datos Heroku Postgres con modificaciones para pgbackups: transfer . (Si tiene varias instancias, digamos un servidor intermedio, agregue "-a" o "--remote" a cada línea Heroku para especificar qué servidor).
# 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
Tenga en cuenta que si compara su tamaño de datos entre ellos, el nuevo puede ser mucho más pequeño debido a las eficiencias en 9.2. (Mi 9.2 fue aproximadamente el 70% de la 9.1)