こんにちは。
HerokuのPostgreSQLを9.2にアップグレードする作業を行ったのでその手順を残しておきます。
1、WebコンソールでアプリのオーナーアカウントのAPIキーを確認
有償Addonの追加を行うのでコマンドはアプリオーナーのアカウントで叩く必要があります。
2、コマンドラインでherokuアカウントの切り替え
set HEROKU_API_KEY=xxxxx
簡単なのでいつもこの方法でアカウントを切り替えてますが、ちゃんと切り替えようとするならコマンドプラグインの「heroku-accounts」を入れるのが良いらしいです。
この方法だとgitにはアクセスできないですしね。
3、メンテナンスモードにして外部からのアクセスを遮断
heroku maintenance:on --a my-app
4、PostgreSQLのデータバックアップ
Addonのpgbackupsを使ってデータをバックアップします。
pgbackupsは無償で毎日バックアップを取ってくれるのでPostgreSQLを使うなら必ず入れた方が良いです。
heroku pgbackups:capture -a my-app
バックアップを取り終わったら表示されたバックアップIDをメモしておきます。
5、既存のPostgreSQLを入れ替え
バックアップが終わったら既存のDBを破棄して9.2で新しいDBを作成します。
heroku addons:remove heroku-postgresql:crane -a my-app heroku addons:add heroku-postgresql:crane --version=9.2 -a my-app
「--version=9.2」がPostgreSQLのバージョン指定です。
多分現時点ではまだ無指定の場合は9.1になると思うけど近日デフォルト9.2に変わるはずです。
DB作成時にforkオプションを指定するとを使うとDBの作成とデータの移行を同時にやってくれるはずですが、同一プランでのDBの追加ができるのかどうかがいまいち確信が持てなかったので先に既存DBを破棄してから追加しました。
DBの作成が完了するまでには数分かかるので
heroku pg -a my-app
でStatusがavailableになるのを待ちます。
6、データのリストアとDATABASE_URLの切り替え
heroku pgbackups:restore HEROKU_POSTGRESQL_XXXX_URL bxxx -a my-app heroku pg:promote HEROKU_POSTGRESQL_XXXX_URL -a my-app
作成されたDBにバックアップをリストアします。
DATABASE_URLの切り替えは「heroku config:add」で行っても同じです。
(pg:promoteは内部的にheroku config:addを実行しているだけです。)
7、メンテナンスモード解除
heroku maintenance:off --a my-app
以上、動作確認して終わりです。
データ量にもよると思いますが概ね10分くらいで作業できます。