Qual è il modo consigliato di aggiornare un database di produzione Heroku Postgres a 9.2 con tempi di inattività minimi? È possibile utilizzare un follower o dovremmo prendere il percorso pgbackups/snapshots?aggiornamento a postgres su Heroku
risposta
Fino al logical followers in 9.4, è necessario eseguire il dump e il ripristino (per i motivi descritti da Craig). Puoi semplificarlo con pgbackups: transfer. Il trasferimento diretto è più rapido di dump e restore, ma sappi che non avrai un'istantanea da conservare.
Lo script di seguito è in pratica il Using PG Backups to Upgrade Heroku Postgres Databases di Heroku con la modifica per pgbackups:transfer. (Se si dispone di più istanze, per esempio un server di gestione temporanea, aggiungere "-a" o "--remote" per ogni linea di Heroku per specificare quale server.)
# 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
Si noti che se si confrontano le dimensioni dei dati tra di loro , il nuovo potrebbe essere molto più piccolo a causa dell'efficienza in 9.2. (Il mio 9.2 era circa il 70% del 9.1.)
I follower di Heroku sono, AFAIK, solo server di replica di streaming PostgreSQL. Ciò significa che non è possibile utilizzarli attraverso le versioni, è necessario disporre di database compatibili con i binari.
Le stesse tecniche dovrebbero essere applicate come PostgreSQL ordinario, tranne che potresti non essere possibile utilizzare pg_upgrade
su Heroku. Ciò richiede l'accesso shell (ssh, ecc.) Come utente postgres
sul sistema che ospita il database, quindi dubito che sia possibile su Heroku a meno che non abbiano fornito uno strumento per eseguire pg_upgrade
per te. Non riesco a trovare molte informazioni su questo.
Probabilmente si dovrà guardare con Slony-I, Bucardo, o un'altra soluzione di replica basata su trigger di fare l'aggiornamento a meno che non si può trovare un modo per eseguire pg_upgrade
su un'istanza di database Heroku. L'idea generale è di impostare una nuova istanza 9.2, utilizzare Slony per clonare i dati dall'istanza 9.1, quindi una volta che sono completamente sincronizzati, si interrompe l'istanza 9.1, si rimuovono i trigger Slony e si passano i client 9.2 istanza.
Per ulteriori informazioni su "postgresql downtime downtime upgrade downtime" ecc., Vedere come si va.
Craig è corretto, sono repliche di streaming: non è possibile utilizzare questa rotta per l'aggiornamento. Attualmente, l'approccio migliore sarebbe utilizzare il comando pgbackups: transfer disponibile nel plugin pg-extras (https://github.com/heroku/heroku-pg-extras#pgbackupstransfer) per trasferire i dati rapidamente (mentre sei l'app è in modalità manutenzione). In futuro, abbiamo in programma di supportare opzioni di aggiornamento più semplici. – hgmnz
@hgmnz Perché non usare [heroku-pgupgrade] (https://github.com/hgmnz/heroku-pgupgrade)? – thejaz
@thejaz aha! Bene, perché è attualmente in beta, e capita di essere rotto (lato server) fino a nuovo avviso. Una volta pronto per la prima serata, mi assicurerò di prenderlo in nota su quel repository. – hgmnz
- 1. Aggiornamento Heroku Postgres Piano DB
- 2. Connessione rifiutata con Go + Postgres su Heroku
- 3. Errore Postgres su Heroku con Resque
- 4. Modo programmabile per gestire database autonomi su Heroku Postgres
- 5. C'è un modo per riavviare Postgres su Heroku?
- 6. App Aws con database Heroku Postgres
- 7. Aggiornamento postgres da sinistra join
- 8. Come connettere PyCharm a un database Heroku postgres
- 9. deadlock in postgres su semplice query di aggiornamento
- 10. Heroku toolbelt non riesce aggiornamento
- 11. Heroku Postgres: questa connessione è stata chiusa
- 12. Heroku/Postgres Errore: intero fuori portata
- 13. Heroku vs Elean Beanstalk con Django + Postgres
- 14. Come rimuovere il database postgres da heroku
- 15. Come aggiornare un database postgres da 9.3 a 9.4 su heroku?
- 16. accesso pg_largeobject su heroku
- 17. Impostazione nome_applicazione su Postgres/SQLAlchemy
- 18. Aggiornamento a Heroku Toolbelt v4 ottiene accesso negato errore
- 19. Tempo di non aggiornamento in heroku
- 20. Come abilitare i moduli contrib sul database Heroku Postgres
- 21. come eseguire uno script .sql su heroku?
- 22. Caricamento schema Heroku: Autorizzazione negata per database "postgres" Utente
- 23. Accesso a Django su Heroku non visualizzato
- 24. Reindirizza HTTP a HTTPS su Flask + Heroku
- 25. Rails 3.1 - Pushing to Heroku - Errori durante l'installazione dell'adattatore Postgres?
- 26. Gestione degli indici db su heroku
- 27. su postgres: Siamo spiacenti?
- 28. Come impostare l'origine dati Spring/Heroku/postgres SSL
- 29. Heroku - Impossibile configurare il database postgres tramite l'app Play Framework?
- 30. Come configurare l'env staging su Heroku?
Poiché la soluzione (più votata) è applicabile a 9.2 e 9.3, si potrebbe prendere in considerazione la rimozione del numero di versione dal titolo della domanda. –