2012-12-28 9 views
12

Heroku Postgresの本番データベースを9.2にアップグレードするための推奨される方法は何ですか?フォロワーを使用することは可能ですか、またはpgbackups/snapshotsルートを使用する必要がありますか?Herokuのpostgresにアップグレードする

+0

9.2と9.3に(最高の投票数の)解決策が適用できるので、あなたの質問タイトルからバージョン番号を削除することを検討することができます。 –

答えて

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

Herokuフォロワーは、AFAIK、PostgreSQLストリーミングレプリカサーバーです。つまり、バージョン間での使用はできません。バイナリ互換のデータベースが必要です。

普通のPostgreSQLと同じテクニックが適用されます。但し、Herokuではpg_upgradeを使用できない場合があります。これには、データベースをホストするシステム上のpostgresユーザとしてシェル(sshなど)のアクセスが必要です。pg_upgradeを実行するツールを提供していない限り、Heroku上では可能性はありません。私はこれに関する多くの情報を見つけることができません。

pg_upgradeをHerokuデータベースインスタンスで実行する方法が見つからない限り、Slony-I、Bucardo、または別のトリガーベースのレプリケーションソリューションを使用してアップグレードを行う必要があります。一般的な考え方は、新しい9.2インスタンスを設定し、Slonyを使用して9.1インスタンスのデータをそのインスタンスに複製し、完全に同期したら9.1インスタンスを停止し、Slonyのトリガーを削除し、クライアントを9.2インスタンス。

"postgresql low downtime upgrade slony"などの詳細については、どうぞご覧ください。

+0

Craigは正しいです、彼らはストリーミングレプリカです:あなたはアップグレードのためにこのルートを使用することはできません。現在、最良の方法は、pg-extrasプラグイン(https://github.com/heroku/heroku-pg-extras#pgbackupstransfer)で利用可能なpgbackups:transferコマンドを使用して、データをすばやく転送することです。アプリはメンテナンスモードです)。今後、より簡単なアップグレードオプションをサポートする予定です。 – hgmnz

+0

@hgmnzなぜ[heroku-pgupgrade](https://github.com/hgmnz/heroku-pgupgrade)を使用しないのですか? – thejaz

+0

@thejaz aha!これは現在ベータ版であるため、今後通知があるまで(サーバー側で)壊れてしまいます。プライムタイムの準備ができたら、そのレポに注意してください。 – hgmnz

関連する問題