103
113

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 を利用してみよう

Last updated at Posted at 2018-03-02

アジェンダ

  • 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 は無料のものでもクレジットカードの登録が必要となることに注意。

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

ドキュメント

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

Screen Shot 2018-03-02 at 16.38.04.png

注意点など

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

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 自体をアップデートする必要がありそう。
アップデート方法がわかればまた記載します。

解決法

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

103
113
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
103
113

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?