[Heroku] ProductionのDatabasesをStagingに反映

最近の勉強で学んだ事を、ノート代わりにまとめていきます。
主に自分の学習の流れを振り返りで残す形なので色々、省いてます。
Webエンジニアの諸先輩方からアドバイスやご指摘を頂けたらありがたいです！

#データを本番環境に反映する前にステージング環境で確認したい！
本番・ステージング環境で行う項目
１、バックアップを作成する。

```
$heroku pg:backups:capture --app sushi
```

２、バックアップステータスの確認

```
$heroku pg:backups --app sushi
=== Backups
ID    Backup Time                Status                              Size    Database
----  -------------------------  ----------------------------------  ------  --------
b013  2020-03-18 19:03:16 +0000  Running                                     IVORY
b011  2020-03-01 04:47:52 +0000  Completed 2020-03-01 04:47:54 +0000  1.9GB   IVORY
b010  2020-03-01 04:47:52 +0000  Completed 2020-03-01 04:47:54 +0000  1.9GB   IVORY
b004  2020-03-01 04:47:52 +0000  Completed 2020-03-01 04:47:54 +0000  1.9GB   IVORY

==== Restores
ID    Restore Time               Status                              Size    Database
----  -------------------------  ----------------------------------  ------  --------
r002  2020-03-16 17:33:19 +0000  Finished 2020-03-16 17:33:19 +0000  1.9GB   IVORY
r001  2020-03-15 12:13:44 +0000  Failed 2020-03-15 12:13:47 +0000    1.7GB   IVORY
```

３、本番のアプリのデータベースからステージングに直接転送する

```
$ heroku pg:backups:restore sushi::b013 --app sushi-staging
```

以下の様に本当に変更して良いかの確認が行われるので

```
▸    WARNING: Destructive Action
 ▸    This command will affect the app sushi-staging
 ▸    To proceed, type sushi-staging or re-run this command with --confirm sushi-staging
```

４、確認作業を実行する！

```
> sushi-staging
Starting restore of b013 to postgresql-flexible-85326... done

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

Restoring... done
```

上記で反映されたのでDBを確認してください！

#ステージングのDBを元に戻したい場合

１、バックアップのステータスを確認

```
$ heroku pg:backups --app sushi-staging
=== Backups
ID    Created at                 Status                               Size      Database
────  ─────────────────────────  ───────────────────────────────────  ────────  ────────
b002  2020-05-01 04:47:52 +0000  Completed 2020-05-01 04:47:54 +0000  1.9GB     DATABASE
b001  2020-05-01 04:29:12 +0000  Completed 2020-05-01 04:29:14 +0000  1.9GB     DATABASE

=== Restores
ID    Started at                 Status                               Size      Database
────  ─────────────────────────  ───────────────────────────────────  ────────  ────────
r003  2020-05-01 05:27:30 +0000  Completed 2020-05-01 05:27:31 +0000  1.9GB     DATABASE

=== Copies
No copies found. Use heroku pg:copy to copy a database to another
```

２、バックアップの復元

```
$ heroku pg:backups:restore b002 --app sushi-staging
 ▸    WARNING: Destructive Action
 ▸    This command will affect the app sushi-staging
 ▸    To proceed, type sushi-staging or re-run this command with --confirm sushi-staging

> sushi-staging
Starting restore of b002 to postgresql-flexible-85326... done

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

Restoring... done
```

#参考記事
・[Heroku PGBackups](https://devcenter.heroku.com/articles/heroku-postgres-backups/)
・[Importing and Exporting Heroku Postgres Databases](https://devcenter.heroku.com/articles/heroku-postgres-import-export/)
・[Heroku transfer db from one app to another](https://stackoverflow.com/questions/29753366/heroku-transfer-db-from-one-app-to-another/)
・[How do I transfer production database to staging on Heroku using pgbackups? Getting error](https://stackoverflow.com/questions/10673630/how-do-i-transfer-production-database-to-staging-on-heroku-using-pgbackups-gett/)