Help us understand the problem. What is going on with this article?

ローカルとherokuのpostgres間でデータをアップロード、ダウンロードする

More than 3 years have passed since last update.

heroku postgresは便利ですが、移行の際に初期データの投入をどうしようか悩みますよね。規模が小さければseedでインポートできますが、ある程度のサイズのデータだとそうはいきません。

その辺の方法を悩んでいたときに見つけたコマンドがheroku pg:pushheroku pg:pullです。このコマンドを使うとローカルのpostgres→heroku postgresへのアップロード、あるいはheroku postgres→ローカルのpostgresへのダウンロードが可能です。

もちろんローカルでpostgresが稼働していることが条件となりますが、安全にheroku 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へインポートするといった方法もありますが、この方法なら手元のデータを直接投入できるので便利ですね。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away