LoginSignup
18
17

More than 5 years have passed since last update.

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

Posted at

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へインポートするといった方法もありますが、この方法なら手元のデータを直接投入できるので便利ですね。

18
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
17