Heroku Connectを使うとHeroku Postgres側に自動的にスキーマが生成される感じになるので、開発する場合は

  • ローカル開発環境からHeroku PostgresのDBに直接接続する
  • Heroku Postgresのスキーマをローカル環境に持っていく

の2パターンで開発することになります。ただ、前者の場合は同一DBに複数人が開発用として接続することになるので、ミスってデータやテーブルを削除したときや、ユニークなデータを格納したつもりがバッティングしてダメとか、開発上色々と問題があります。さらに東京-US間のレイテンシがあるのでDB接続も低速です。

ということで、実際に開発する場合は後者のパターンになるのですが、この「Heroku Postgresのスキーマをローカルに持っていく」やり方を備忘として残しておきます。

herokuコマンドをインストール

ubuntuだとこんな感じ

Heroku Postgresのバックアップ&ダンプファイル取得

ローカルにリストア

補足 pg_dumpを使うパターン

以下のコマンドで同じようにダンプできます。pg:backupsはレコードもバックアップしちゃいますが、スキーマだけとか、あるオブジェクトだけ、とかそういった細かいダンプの制御が可能なのが利点です。あとはheroku toolbeltも不要なのも良いですね。

その他

hstoreの拡張が入っていないとエラーになります。Ubuntuの場合はこんな感じでインストールすればOK。

 

自動化とかの理由でpg_restoreやpsqlでのパスワードを省略するには、ホーム直下に.pgpassを置くか、環境変数を設定するかで対応することができます。

ファイルを置く場合はこんな感じで↓

参考URL↓

環境変数でやる場合はこんな感じで↓

 

ローカルのpg_dumpのバージョンとHeroku Postgres側のバージョンが違うと以下の様なエラーが出ます。

Heroku Postgres側のバージョンは手も足も出ないので、この場合はローカル側のpg_dumpをアップグレードしてバージョンを合わせればOKです。

参考URL→PostgreSQL 9.4 を Ubuntu 14.04 にインストールする – ttanimichi’s blog