アジェンダ
- Herokuに使えるDB
- Heroku Postgresについて
- 導入方法
- ドキュメント
- Postgres のログを取る
- Dataclips
- エクスポートとインポート
-
pg_restore
古い問題
Herokuに使えるDB
- 公式にサポートしているデータベースは Postgres
- その他も使えるが、third-party による提供
Heroku Postgresについて
- Heroku上で使える無料のDB
- Add-ons(アドオン)と呼ばれる追加機能で利用できる
導入方法
Add-ons の追加
管理画面の Resources > Add-ons で検索してインストール。
Heroku の Add-ons は無料のものでもクレジットカードの登録が必要となることに注意。
DB URL の確認
管理画面の Settings > Config Variables にURLが記載されている。
URLの構成
postgres:// USER:PASS @host:port/database
ドキュメント
-
Postgres Basics
基本的なこと -
Postgres Performance
パフォーマンスについて -
Postgres Data Transfer & Preservation
データの転送と保存 -
Postgres Availability
Heroku Postgres ができること -
Postgres Special Topics
スペシャルトピックス
Postgres のログを取る
Herokuは heroku logs -t
を使ってログを取ることができ、さらに -p postgres
オプションをつけるとポスグレのログだけをとることができる。
発行されたクエリをチェックしたりするのに便利。
heroku logs -p postgres -t
Dataclips
更新されていくDBをちょくちょくデータ抽出してチェックしたいときなどに使える(「一ヶ月間に注文された本のデータ」など)。
データを取得するクエリと出力するファイル等を保存できるので、一回設定すれば次からは出力するファイルを直接見るだけでよい。
注意点など
- Googleスプレッドシート、ファイル(CSV、JSON、XLS)対応
- 最後の結果から1分以上経つと新たにクエリが走る
- 10分以上かかるクエリは自動的にキャンセルされる
おすすめ記事
エクスポートとインポート
エクスポート
Heroku の Postgres をエクスポートし、ローカルにリストアすることができる。
バックアップをダウンロードする
新しくバックアップを作成してから、dumpファイルとしてダウンロードする。
バックアップ作成
heroku pg:backups:capture
dumpファイルのダウンロード
heroku pg:backups:download
※Git連携しているフォルダ外から実行するとき
--app(-a)
オプションをつける必要があるので注意。
heroku pg:backups:capture --app hoge-project
heroku pg:backups:download --app hoge-project
ローカルにリストアする
下記コマンドの localhost
myuser
mydb
をリストアしたいローカルDBの情報に置き換える。
latest.dump
はダウンロードしたdumpファイル名。
pg_restore --verbose --clean --no-acl --no-owner -h localhost -U myuser -d mydb latest.dump
インポート
逆にローカルのDBをインポートすることもできる。
dumpファイルの作成
「ローカルにリストア」と同様、ローカルDBの情報に置き換えて以下コマンドを実行。
PGPASSWORD=mypassword pg_dump -Fc --no-acl --no-owner -h localhost -U myuser mydb mydb.dump
Heroku にインポートする
Amazon S3などにdumpファイルをあげる
HTTPアクセス可能な場所(Amazon S3など)に作成したdumpファイルをあげる。
セキュリティの観点から、インポート時のみ一時的に公開アクセス可能にし、ファイル名は無名にしてインポート後に削除すること。
Herokuにインポート(リストア)する
下記コマンドで Heroku にインポートする。
DATABASE_URL
はインポートしたいDBのURL(前述の「Heroku Postgresについて > DB URLの確認」参照)にする。
heroku pg:backups:restore 'https://s3.amazonaws.com/me/items/3H0q/mydb.dump' DATABASE_URL
pg_restore
古い問題
エクスポート時に「pg_restore
コマンドが古い」と言われる
「エクスポート > ローカルにリストアする」のコマンドを実行すると、
[archiver] unsupported version (1.13) in file header
とエラーが出てリストアできない。
これはドキュメントにも記載されていて、pg_restore
のバージョンが古いことが原因らしい。
バージョンを確認したところ 9.3.5
だったので、Postgres.app が更新されると治るかなーと思い、Postgres.appをアップデートした。
Postgres.app のアップデート方法
Postgres.app と pg_restore
は関係なかった
Postgres.app をアップデートしたところで状況は変わらず。
type pg_restore
で確認したところ、
どうやら pg_restore
自体をアップデートする必要がありそう。
アップデート方法がわかればまた記載します。
解決法
pg_restore
を /Applications/Postgres.app/Contents/Versions/latest/bin/pg_restore
としたらいけた。