2014-01-28

herokuのpostgreSQLへのデータ移行

herokuからpostgreSQLのデータ移行の方法をまとめてみる。

方法としては以下の2つがあるみたい。

  1. pg:pushでローカルのレコードまるごとインポート
  2. 標準入力からpsqlコマンドでインポート

1. pg:pushを使う

この方法はローカルのpostgreSQLデータベースのデータをそのままherokuに反映するような方法。

具体的には

heroku pg:reset DATABASE_URL
PGUSER=postgres heroku pg:push [MyLocalDBName] DATABASE_URL

とheroku側のDBをリセットして、ローカルのDBをインポートする感じ。

この方法の詳細はこちらから。

2. ローカルDBのdumpからリストアする。

ローカルDBのdumpを作成し、s3等のWebリソースに置き、heroku側postgreSQLからこのdumpを使ってリストアする方式。

s3とかのオープンなスペースに置くとなると一時的とはいえセキュリティ的にどうなの?って印象。

詳細はこちら

3. psqlからインポート

psqlコマンドでherokuのpostgreSQLにログインして、インポート対象のCSVファイルに対してcopyコマンドを打つと、herokuのpostgresユーザがsuperuserでない為に「ローカルからファイルを読み込めない」的なエラーになってしまう。

ただし、標準入力からだといけるので

cat [target csv file path] | psql -U [heroku user name] \
-W -h [heroku host name] [heroku db name] -c "copy hoge(fuga1, fuga2, fuga3) from stdin with csv"

とやればインポート可能。

herokuのホスト名やユーザ名等はherokuのpostgreSQL設定画面から取得する。

参考URLはこちら

ところで、一括更新する場合(例えばマスタの更新とか)ってどうするんだろ?

このエントリーをはてなブックマークに追加