サイドバーの「Django ドキュメント検索」というプレースホルダの入った検索では、Django ドキュメント (Django 2.1) の公式サイト内を検索できます
Heroku とローカルの PostgreSQL 間のデータコピー

目次

はじめに


Heroku 上の PostgreSQL からローカルの PostgreSQL へ、またその逆にローカルから Heroku へ PostgreSQL 間でデータをコピーできると、デプロイ時にとても助かります。Heroku CLI にはそのためのコマンドが用意されていますのでまとめてみました。

ここでは、下記パラメータを使うものとします。

Heroku 上でのアプリケーション名 appname
ローカルの PostgreSQL ユーザ名 pguser
上記ユーザのパスワード password
ローカルで一時的に使用するデータベース名 mylocaldb

Heroku → ローカル

Heroku の PostgreSQL からローカルの PostgreSQL にデータをコピーするには、下記コマンドを使います。

$ PGUSER=pguser PGPASSWORD=pasword heroku pg:pull DATABASE_URL mylocaldb --app appname

注意ここで、mylocaldb は空でないとエラーが発生します。(誤ってデータ削除するのを防止するため。)

ローカルのデータベースは下記コマンドで削除できます。

$ dropdb mylocaldb

ローカル → Heroku

ローカルの PostgreSQL から Heroku の PostgreSQL にデータをコピーするには、下記コマンドを使います。

$ PGUSER=pguser PGPASSWORD=pasword heroku pg:push mylocaldb DATABASE_URL --app appname

注意ここで、Heroku 上の PostgreSQL データベース は空でないとエラーが発生します。(誤ってデータ削除するのを防止するため。)

Heroku 上のデータベースは下記コマンドで削除できます。

$ heroku pg:reset --app appname

コマンドを実行すると確認のため、アプリケーション名の入力を求められますので、appname を改めて入力します。

なお、管理人の実行環境では、上記 push コマンドで、一部エラーが発生しました。

・
・
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 3079; 0 0 COMMENT EXTENSION plpgsql
pg_restore: [archiver (db)] could not execute query: ERROR:  must be owner of extension plpgsql
    Command was: COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
・
・
WARNING: errors ignored on restore: 1

このエラーは実害は無いので無視して良いようです。(pg:push failing with must be owner of extension plpgsql · Issue #55 · heroku/heroku-pg-extras · GitHub)

参考

低価格なのに高速・多機能・高セキュリティ 月額400円(税別)から最大容量100GB WordPress専用高速サーバー Z.com WP
おすすめの記事