この記事では、herokuのpostgresのバックアップ関連で使うコマンドを一覧で紹介しています。
後半では、pg:copyを使ったプラン変更時のデータ移行のコマンドを実行順に紹介しています。
参考: Heroku PGBackups
heroku-postgresの情報を確認する
heroku pg:info --app sushi
バックアップに使うコマンド類
# マニュアルバックアップする(--verbose フラグで実行ログを見られます)
heroku pg:backups capture --app sushi
# バックアップをキャンセルする
heroku pg:backups:cancel --app sushi
# バックアップを削除する
heroku pg:backups:delete b999 -a sushi
# JST 午前0時にバックアップをスケジュールする
heroku pg:backups schedule DATABASE_URL --at '00:00 Asia/Tokyo' --app sushi
# スケジュールを確認する
heroku pg:backups schedules --app sushi
# スケジュールを削除する
heroku pg:backups unschedule DATABASE_URL --app sushi
# heroku上のバックアップデータからリストアする
heroku pg:backups restore b999 DATABASE_URL --app sushi
# sushiからsashimiへバックアップデータを使ってリストアする
heroku pg:backups restore sushi::b999 DATABASE_URL --app sashimi --confirm sashimi
# AWS S3などにアップ済みのバックアップファイルをURLで指定してリストアする
heroku pg:backups:restore 'https://s3.amazonaws.com/me/items/sushi_backup.dump' DATABASE_URL -a sushi
# バックアップの公開URLを取得する
heroku pg:backups public-url --app sushi
# バックアップのdumpファイルをローカルに取得する
heroku pg:backups:download --app sushi
# 実行中のバックアッププロセスを確認する
heroku pg:psql -c "select * from pg_stat_activity where application_name = 'Heroku Postgres Backups'" --app sushi
heroku pg:copy を使った新しいプランへのデータ移行の一連のコマンド
- pg:copyコマンドは、データサイズは10Gまでの制限があります。
- 10Gを超える場合は、同一アプリ内ならpg:upgradeが利用できるようです。
- 別アプリへのデータ移行は、バックアップファイルからリストア先を変更してコピーすることもできます。
# 新しいプランのpostgresが追加されている前提です
# 新しいデータベースでtimezoneを設定する
heroku pg:psql -a sushi
$ show timezone;
$ alter database your_database_name set timezone = 'Asia/Tokyo';
$ select current_timestamp;
$ \q
# DATABASE_URLのアタッチが正しいか確認する
heroku config -a sushi | grep DATABASE
# メンテナンスモードにする
heroku maintenance:on -a sushi
# ワーカーがあれば停止しておく
# heroku schedulerを使っていればはGUIから停止する
heroku ps:scale worker=0 -a sushi
# バックアップを取る
heroku pg:backups capture DATABASE_URL -a sushi
# バックアップを確認する
heroku pg:backups -a sushi
# pg:copyでデータを新しいデータベースへコピーする
heroku pg:copy DATABASE_URL {NEW_DB_NAME} -a sushi
# 新しいデータベースを昇格させる
heroku pg:promote {NEW_DB_NAME} -a sushi
# 昇格されたのを確認する
heroku config -a sushi | grep DATABASE
# バックアップスケジュールを確認する
heroku pg:backups schedules -a sushi
# 新しいpostgresの方でバックアップを取る
heroku pg:backups -a sushi
# ワーカーを再開する
# heroku schedulerはGUIから再開する
heroku ps:scale worker=1 -a sushi
# メンテナンスモードをオフにする
heroku maintenance:off -a sushi
# 古いデータベースを削除する
heroku addons:destroy {OLD_DB_NAME} -a sushi
postgresのデータの他のアプリケーションへのコピー
# sushiアプリ から sashimiアプリ へデータをコピーする
heroku pg:copy sushi::DATABASE_URL DATABASE_URL --app sashimi
データベースのアタッチとデタッチ
# データベースをattachする
heroku addons:attach my-originating-app::DATABASE --app sushi
# データベースをdetachする
heroku addons:detach HEROKU_POSTGRESQL_BRONZE --app sushi