Heroku Postgres のプロビジョニング
最終更新日 2025年03月17日(月)
Table of Contents
プロビジョニングする前に
Heroku Postgres をプロビジョニングする前に、それがまだアプリに対してプロビジョニングされていないことを確認します。2023 年 5 月 15 日より前にアカウントを作成した場合、またはアカウントの自動プロビジョニングの有効化を Heroku サポートに依頼した場合、Heroku は特定のライブラリを含むアプリに Postgres を自動的にプロビジョニングします。
heroku addons
コマンドを使用して、アプリがすでに Heroku Postgres をプロビジョニングしているかどうかを判定します。
$ heroku addons
Add-on Plan Price State
─────────────────────────────────────────────────── ─────────── ──────── ───────
heroku-postgresql (postgresql-concave-52656) essential-0 $5/month created
アドオンをプロビジョニングする
アプリのアドオンのリストに heroku-postgresql
がない場合、CLI コマンドを使用してプロビジョニングできます。
$ heroku addons:create heroku-postgresql:<PLAN_NAME> -a <APP_NAME>
たとえば、Essential-0 プランデータベースをプロビジョニングするには、次のようにします。
$ heroku addons:create heroku-postgresql:essential-0 -a example-app
Creating heroku-postgresql:essential-0 on ⬢ example-app... ~$0.007/hour (max $5/month)
Database should be available soon
postgresql-concave-52656 is being created in the background. The app will restart when complete...
Use heroku addons:info postgresql-concave-52656 to check creation progress
Use heroku addons:docs heroku-postgresql to view documentation
バージョンを指定する
プロビジョニングコマンドに --version
フラグを含めると、プロビジョニングする Postgres のバージョンを指定できます。
addons:create
の例は Heroku CLI v9.0.0 以降の構文に従っています。v8.11.5 以前を使用している場合は、次のコマンドを使用してください。
$ heroku addons:create heroku-postgresql:<PLAN_NAME> --version=15
$ heroku addons:create heroku-postgresql:<PLAN_NAME> -- --version=15
PostgreSQL バージョンのサポートの詳細を確認してください。
選択したプランに応じて、データベースは使用可能になるまでに最長 5 分かかることがあります。heroku pg:wait
コマンドでステータスを追跡できます。このコマンドは、データベースが使用できるようになるまでブロックします。
ログのブロック
アドオン作成時に、データベースに対して実行されるクエリのログ記録を防止するためにフラグを渡すことができます。このオプションをオンにすると、データベースのプロビジョニング後にオフにすることはできません。オンにした後でオフにするには、新しいデータベースに移行する必要があります。
ログ内のクエリをブロックすると、アプリケーションをデバッグしたり、アプリケーションパフォーマンスをチューニングしたりするのに役立つ Heroku の機能が低下します。
addons:create
の例は Heroku CLI v9.0.0 以降の構文に従っています。v8.11.5 以前を使用している場合は、次のコマンドを使用してください。
$ heroku addons:create heroku-postgresql:standard-0 -a example-app --block-logs
$ heroku addons:create heroku-postgresql:standard-0 -a example-app -- --block-logs
アプリケーションの環境設定
プロビジョニングプロセスの一部として、DATABASE_URL
環境設定がアプリの設定に追加されます。DATABASE_URL
には、アプリがデータベースにアクセスするために使用する URL が含まれています。アプリにすでに Heroku Postgres データベースがあり、別のものをプロビジョニングする場合は、この環境設定の名前が代わりに HEROKU_POSTGRESQL_<COLOR>_URL
(HEROKU_POSTGRESQL_YELLOW_URL
など) という形式になります。
heroku config
コマンドでアプリの環境設定の名前および値を確認できます。
アプリの DATABASE_URL
環境設定の値は、いつでも変化する可能性があります。Heroku アプリの内部または外部のどちらでも、この値に依存しないでください。
この時点で、空の PostgreSQL がプロビジョニングされます。既存のデータソースからデータを入力するには、インポート手順を参照するか、言語固有の手順に従って、アプリケーションから接続してください。
プライマリデータベースの指定
DATABASE_URL
環境設定は、アプリのプライマリ Heroku Postgres データベースの URL を指定します。1 つのデータベースを持つアプリの場合は、その URL がこの環境設定に自動的に割り当てられます。
複数の Postgres データベースを持つアプリの場合は、heroku pg:promote
でプライマリデータベースを設定します。一般的なユースケースには、リーダー/フォロワー高可用性設定、またはデータベースアップグレードプロセスの一部が含まれます。
アプリケーション間での Heroku Postgres の共有
heroku addons:attach
コマンドを使用して、単一の Heroku Postgres データベースを複数のアプリ間で共有できます。--as
フラグを使用してアドオンのエイリアスを指定することもできます。
$ heroku addons:attach my-originating-app::DATABASE --app example-app --as ATTACHED_DB
Attaching postgresql-addon-name to example-app... done
Setting ATTACHED_DB vars and restarting example-app... done, v11
デフォルトでは、アタッチされたデータベースの URL は、名前形式 HEROKU_POSTGRESQL_<COLOR>_URL
で環境設定に割り当てられます。この例ではエイリアスが設定されていたため、環境設定の名前は ATTACHED_DB
になります。
共有されるデータベースは、必ずしも共有されるいずれか特定のアプリのプライマリデータベースであるわけではありません。共有されたデータベースをプロモートするには、他のデータベースに使用した同じコマンドを使用します。
別のアプリとの Heroku Postgres インスタンスの共有を停止するには、heroku addons:detach
コマンドを使用します。
$ heroku addons:detach ATTACHED_DB --app example-app
Detaching ATTACHED_DB to postgresql-addon-name from example-app... done
Unsetting ATTACHED_DB config vars and restarting example-app... done, v11
アドオンの削除
アドオンは、Heroku Dashboard を使用して、または CLI を使用して削除できます。
データベースをデプロビジョニングし、復元する場合は、指定された継続的な保護ロールバック期間内に復元できる可能性があります。この期間を過ぎると、データベースを復元できなくなる可能性が高くなります。サポートが必要な場合は、サポートチケットを開いてください。
デプロビジョニングする前にデータのバックアップを作成することをお勧めします。PG Backups を使用すると、データのスナップショットを作成し、バックアップをダウンロードして外部ストレージサービスに保存できます。デプロビジョニングする前にデータをエクスポートすることもできます。
Dashboard を使用して削除する
Heroku Dashboard から Postgres データベースを削除するには:
- Heroku Dashboard からアプリケーションに移動し、
Resources
(リソース) タブを選択します。 - 削除する Heroku Postgres アドオンを選択し、右側のドロップダウンを選択してから
Delete Add-on
(アドオンの削除) を選択します。 Remove Add-on
(アドオンを外す) ページで、確認としてアプリの名前を入力し、Remove add-on
(アドオンを外す) を選択します。
CLI を使用して削除する
Heroku Postgres データベースを削除するには、次のコマンドを使用します。
$ heroku addons:destroy heroku-postgresql
同じ種類のデータベースが 2 つある場合は、その環境設定名を使用してアドオンを削除する必要があります。たとえば、HEROKU_POSTGRESQL_GRAY_URL
データベースを削除するには、次のコマンドを実行します。
$ heroku addons:destroy HEROKU_POSTGRESQL_GRAY
削除されたデータベースが DATABASE_URL
で使用されていたのと同じものであった場合は、その DATABASE_URL
環境設定がアプリで設定解除されます。
次のステップ
Postgres データベースに接続する方法についての詳細は、「Heroku Postgres への接続」を参照してください。