基本的にはHerokuのドキュメントに全て書いてある。https://devcenter.heroku.com/articles/heroku-postgres-backups
AWS EC2のRailsアプリケーションをHerokuに移行した時のデータベースのコピーしたので、手順をメモしておく。
AWSサービス側での操作
- メンテナンス画面にした後、冗長化してあるWEBサーバーを止めて1台のシングル構成に。
- パブリックディレクトリ(Herokuがアクセスできる場所)にPostgresqlのダンプファイルを作成する。念のため、ファイル名は乱数にでもしておく。
PGPASSWORD=$PG_PASSWORD pg_dump -Fc --no-acl --no-owner -U $PG_USER -h $PG_HOST -p $PG_PORT $PG_DATABASE -f /var/www/app/current/public/xxxxxxxxxx.dump
Heroku側での操作
heroku pg:backups:restore 'https://www.app.com/xxxxxxxxxx.dump' DATABASE_URL --app=app-name --confirm=app-name
これでHerokuにDBがコピーされるので、ドメインをHerokuに向けてメンテナンスを解除する。
注意
heroku pg:backups:restore
を実行すると、URLにアクセスできなかったなどの理由でリストアに失敗した場合でもHeroku Postgres のデータベースは削除されてしまう。