ボクココ

個人開発に関するテックブログ

Heroku Postgres にあるデータのダンプとインポート

最近は運用系の記事が多くなってきたな。。メモ書き。

Heroku にあるデータをローカルに持っていきたいとか、テスト環境のpostgresにデータを入れたいとか、そういったことをやってみる。Heroku コマンドの pg:backuppg:restore はテーブル全体なので、個別だとpsql, pg_dump をリモートで接続して対応していくことになる。

接続情報の取得

Heroku Postgres は直接psqlコマンドでデータをいじることが可能だ。まずはその接続情報を取得する。

$ heroku pg:credentials --app APP_NAME HEROKU_POSTGRESQL_****

Connection info string:
   "dbname=****** host=*****.compute-1.amazonaws.com port=5432 user=****** password=**** sslmode=require"
Connection URL:
    postgres://*****:****@****.compute-1.amazonaws.com:5432/****

HEROKU_POSTGRESQL_***の名前はHeroku Postgresのアドオンのページ内に書いてある。

データをダンプ

以下のようなコマンドを叩くことで取得できる。

$ pg_dump --no-acl --no-owner -h [host ip].compute-1.amazonaws.com -U [user name] -t [table name] --data-only [database name] > table.dump

pg_dump: server version: 9.4.1; pg_dump version: 9.3.1 のような警告が出たら、 brew upgrade postgresql でアップデートしたらいけた。

データをインポート

idとか制約入っている場合とかごっそり書き換えるのでまずはテーブル削除

$ echo "truncate [table];" | heroku pg:psql [DATABASE] -app YOUR_APP

そのあとデータをインポートしよう。

$ heroku pg:psql --app YOURAPP DATABASE < table.dump