最近は運用系の記事が多くなってきたな。。メモ書き。
Heroku にあるデータをローカルに持っていきたいとか、テスト環境のpostgresにデータを入れたいとか、そういったことをやってみる。Heroku コマンドの pg:backup
や pg: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