Help us understand the problem. What is going on with this article?

Heroku Postgres を利用してみよう

More than 1 year has passed since last update.

アジェンダ

  • Herokuに使えるDB
  • Heroku Postgresについて
    • 導入方法
    • ドキュメント
  • Postgres のログを取る
  • Dataclips
  • エクスポートとインポート
  • pg_restore 古い問題

Herokuに使えるDB

  • 公式にサポートしているデータベースは Postgres
  • その他も使えるが、third-party による提供

https://devcenter.heroku.com/categories/data-management

Heroku Postgresについて

  • Heroku上で使える無料のDB
  • Add-ons(アドオン)と呼ばれる追加機能で利用できる

導入方法

Add-ons の追加

管理画面の Resources > Add-ons で検索してインストール。
Heroku の Add-ons は無料のものでもクレジットカードの登録が必要となることに注意。

Screen Shot 2018-03-02 at 12.59.26.png

DB URL の確認

管理画面の Settings > Config Variables にURLが記載されている。
Screen Shot 2018-03-02 at 14.07.11.png

URLの構成

postgres:// USER:PASS @host:port/database

ドキュメント

https://devcenter.heroku.com/categories/heroku-postgres

  • Postgres Basics 基本的なこと
  • Postgres Performance パフォーマンスについて
  • Postgres Data Transfer & Preservation データの転送と保存
  • Postgres Availability Heroku Postgres ができること
  • Postgres Special Topics スペシャルトピックス

Postgres のログを取る

https://devcenter.heroku.com/articles/heroku-postgresql#performance-analytics

Herokuは heroku logs -t を使ってログを取ることができ、さらに -p postgres オプションをつけるとポスグレのログだけをとることができる。
発行されたクエリをチェックしたりするのに便利。

heroku logs -p postgres -t

Dataclips

https://devcenter.heroku.com/articles/dataclips

更新されていくDBをちょくちょくデータ抽出してチェックしたいときなどに使える(「一ヶ月間に注文された本のデータ」など)。
データを取得するクエリと出力するファイル等を保存できるので、一回設定すれば次からは出力するファイルを直接見るだけでよい。

Screen Shot 2018-03-02 at 16.38.04.png

注意点など

  • Googleスプレッドシート、ファイル(CSV、JSON、XLS)対応
  • 最後の結果から1分以上経つと新たにクエリが走る
  • 10分以上かかるクエリは自動的にキャンセルされる

おすすめ記事

http://engineer.crowdworks.jp/entry/2016/10/17/174520

エクスポートとインポート

https://devcenter.heroku.com/articles/heroku-postgres-import-export

エクスポート

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 のバージョンが古いことが原因らしい。

Screen Shot 2018-03-02 at 15.21.35.png

バージョンを確認したところ 9.3.5 だったので、Postgres.app が更新されると治るかなーと思い、Postgres.appをアップデートした。

Postgres.app のアップデート方法

Screen Shot 2018-03-02 at 15.25.38.png

Postgres.app と pg_restore は関係なかった

Postgres.app をアップデートしたところで状況は変わらず。
type pg_restore で確認したところ、

Screen Shot 2018-03-02 at 15.27.25.png

どうやら pg_restore 自体をアップデートする必要がありそう。
アップデート方法がわかればまた記載します。

解決法

http://postgresapp.com/documentation/cli-tools.html

pg_restore/Applications/Postgres.app/Contents/Versions/latest/bin/pg_restore としたらいけた。

shosho
Qiitaには忘れそうなこと、勉強したことをメモしてます。
https://shosho-egg.hateblo.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした