Heroku postgresのデータベースのプランを変更する方法は以下のドキュメントにとても詳しく記載されているのですが,少し困ったことがあったので整理してみます.
Upgrading the Version of a Heroku Postgres Database | Heroku Dev Center
上記の記事を補足する形で説明します.
この記事で実行する操作は,今までprovisionしていたデータベースAをpg:copy
コマンドで新しいデータベースBに複製して,データベースBを利用できるようにすることです.
環境変数 DATABASE_URL
を変更できない
AppがprovisionしているデータベースAが存在するために,DATABASE_URLを変更しようとするとエラーになります.
Cannot overwrite attachment values DATABASE_URL
Herokuとしては,attachmentの環境変数を勝手に変更されたら困るようです.
上記はHerokuの管理画面で操作しています.Heroku CLIでも試し,同様のエラーが発生しました.
このエラーに遭遇した人は複数いらっしゃるようです.
- HerokuでDATABASE_URLを変更しようとしたらCannot overwrite attachment values DATABASE_URLと言われる
- ruby on rails - How to change DATABASE_URL for a heroku application - Stack Overflow
- heroku configのDATABASE_URLを書き換える |
しかし,いずれの解決策もデータベースAを先に削除するなど心臓に悪い方法を使っています.
みーは自分が作成したアプリーケーションで,データベースの参照先を格納する環境変数の名前をDATABASE_URL
からDB_URL
などと別の名前に変更し,新たにHerokuの環境変数に設定することで回避しました.
Python, Djangoでdj-database-urlを使用しているならば,
import dj_database_url
dj_database_url.config()
というデフォルトでDATABASE_URL
を読み込む関数を,
import os import dj_database_url dj_database_url.parse(os.environ["DB_URL"])
という関数に書き換えます.
最後に,DB_URL
を利用してアプリケーションがうまく動作することと,データベースがコピーされていることを合わせて確認して,完了です.
少し変則的な操作をする必要はありましたが,実質1つのコマンドpg:copy
でデータベースを複製できるHeroku postgresはやはり便利だと思いました.