heroku postgresは便利ですが、移行の際に初期データの投入をどうしようか悩みますよね。規模が小さければseedでインポートできますが、ある程度のサイズのデータだとそうはいきません。
その辺の方法を悩んでいたときに見つけたコマンドがheroku pg:push
とheroku pg:pull
です。このコマンドを使うとローカルのpostgres→heroku postgresへのアップロード、あるいはheroku postgres→ローカルのpostgresへのダウンロードが可能です。
もちろんローカルでpostgresが稼働していることが条件となりますが、安全にheroku postgresにデータを投入できるため活用の幅は広そうです。
ソースはこちら
heroku pg:pull
heroku pg:pull HEROKU_POSTGRESQL_MAGENTA mylocaldb --app sushi
HEROKU_POSTGRESQL_MAGENTA
はherokuのデータベースURLが入ります。DATABASE_URL
と置き換えれば使えるはずです。mylocaldb
はローカルのデータベース名です。データの上書きを防ぐため、存在しないデータベース名を指定する必要があります。既存のDBはdropdb mylocaldb
とでもすれば削除できます。
データベースにユーザー名、パスワードを指定する場合は以下のオプションを使います。省略するとパスワード無しのデータベースができあがります。
PGUSER=postgres PGPASSWORD=password heroku pg:pull HEROKU_POSTGRESQL_MAGENTA mylocaldb --app sushi
heroku pg:push
アップロードの際はこちらです。こちらもデータの上書きを防ぐために存在しないデータベース名を指定する必要があります。
heroku pg:push mylocaldb HEROKU_POSTGRESQL_MAGENTA --app sushi
DBをダンプしてS3にアップロード、postgresへインポートするといった方法もありますが、この方法なら手元のデータを直接投入できるので便利ですね。