herokuからpostgreSQLのデータ移行の方法をまとめてみる。
方法としては以下の2つがあるみたい。
- pg:pushでローカルのレコードまるごとインポート
- 標準入力から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はこちら。
ところで、一括更新する場合(例えばマスタの更新とか)ってどうするんだろ?