47
42

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Heroku PostgresのDBをローカルにコピーする方法

Last updated at Posted at 2015-10-09

heroku pg:backupsコマンドでバックアップを取ってダウンロードし、pg_restoreコマンドでローカルにレストアすればよいです。

1. バックアップ取得

アプリ名がsushiの場合

$ heroku pg:backups capture --app sushi

こんな感じの出力があります

Use Ctrl-C at any time to stop monitoring progress; the backup
will continue running. Use heroku pg:backups info to check progress.
Stop a running backup with heroku pg:backups cancel.

DATABASE ---backup---> b001

Running... 7.30MB
  • DATABASE ---backup---> b001という感じでバックアップのIDが表示されるので覚えておきます
  • ちょっと時間がかかります。Ctrl+Cで止めても処理は継続されます
  • Hobby Devは2個しか取れない(古い方から消える)ので、チームメイトに一言断ってからにしましょう
  • Standard 0以上のプランならスケジュールバックアップがあるのでそれを使ってもいいです。チームメイトがキャプチャしたバックアップがあるならそれを使ってもいいです
    • その場合、heroku pg:backupsでバックアップの一覧を出せるので、最新のバックアップのIDを覚えておきます

2. バックアップのダウンロード

アプリ名がsushiでバックアップIDがb001の場合

curl -o latest.dump $(heroku pg:backups public-url b001 --app sushi)
  • heroku pg:backups public-url b001 --app sushiでURLを表示できます。10分間有効です
  • 上のコマンドはcurlに渡してすぐにダウンロードするようにしています。latest.dumpというファイル名で保存されます

3. ローカルのDBにレストア

データベース名がhogehoge_developmentで、認証なしの場合(Railsならそうなってるはず)

pg_restore --verbose --clean --no-acl --no-owner -h localhost -d hogehoge_development latest.dump
  • DBのスキーマとレコードがまるごとレストアされます。rake db:migrateなどは必要ないです
  • --verboseオプションでログ表示
  • --cleanオプションで、元々あったデータを全部消してからレストアする
  • --no-acl--no-ownerは権限設定をスキップする。ローカルなのでこれでいいと思う
  • -h localhostはレストア先のホストの指定
  • -d hogehoge_developmentはレストア先のデータベース名の指定

注意点

Heroku Connectを使っている場合、Heroku Connectが使うトリガーや管理テーブル(_trigger_logなど)、管理カラム(_hc_lastopなど)も全部レストアされます。Heroku Connectのテーブルをridgepoleでローカルに再現している場合、管理テーブル、管理カラムも再現するようにしないと、次にridgepole --applyした時にその辺が消えてトリガーが落ちるようになります。

よーするにridgepole --exportする時に--ignore-tables '\\A_'を付けたり、エクスポートされたSchemafileをいじったりするなということです。

参考リンク

47
42
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
42

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?