Heroku Postgres
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2024年04月24日(水)
Table of Contents
Heroku Postgres は、Heroku が直接提供するマネージド SQL データベースサービスです。PostgreSQL ドライバーを使用して、Heroku が公式にサポートするすべての言語を含むどの言語の Heroku Postgres データベースにもアクセスできます。
データベースを管理するためのさまざまな Heroku CLI コマンドに加え、Heroku Postgres には、Web ダッシュボード、クエリを共有するためのデータクリップ、およびその他の複数の役立つ機能が用意されています。
Heroku Postgres プランについて
Heroku Postgres は、Essential、Standard、Premium、Private、Shield というサービスの異なる層にまたがる、さまざまなプランを提供しています。各プランが提供する内容の詳細については、「Choosing the Right Heroku Postgres Plan」(適切な Heroku Postgres プランの選択) を参照してください。
Heroku Postgres プランの価格情報は、Heroku Postgres アドオンページで確認できます。
アプリの要件が最終的に、選択した初期プランで提供されたリソースより大きくなりすぎた場合、簡単にデータベースをアップグレードできます。
Heroku Postgres のプロビジョニング
Heroku Postgres データベースをプロビジョニングする方法についての詳細は、「Heroku Postgres のプロビジョニング」を参照してください。
ローカルの設定
Heroku では、Postgres をローカルで実行して環境間でのパリティを確保することをお勧めします。Heroku Postgres をローカル環境で実行するための設定方法についての詳細は、「Heroku Postgres のローカル設定」を参照してください。
プライマリデータベースの指定
DATABASE_URL
環境設定は、アプリのプライマリ Heroku Postgres データベースの URL を指定します。1 つのデータベースを持つアプリの場合は、その URL がこの環境設定に自動的に割り当てられます。
複数の Postgres データベースを持つアプリの場合は、heroku pg:promote
でプライマリデータベースを設定します。一般的なユースケースには、リーダー/フォロワー高可用性設定、またはデータベースアップグレードプロセスの一部が含まれます。
アプリケーション間での Heroku Postgres の共有
heroku addons:attach
コマンドを使用して、単一の Heroku Postgres データベースを複数のアプリ間で共有できます。
$ heroku addons:attach my-originating-app::DATABASE --app example-app
Attaching postgresql-addon-name to example-app... done
Setting HEROKU_POSTGRESQL_BRONZE vars and restarting example-app... done, v11
アタッチされたデータベースの URL は、名前形式 HEROKU_POSTGRESQL_[COLOR]_URL
で環境設定に割り当てられます。この例では、環境設定の名前は HEROKU_POSTGRESQL_BRONZE_URL
です。
共有されるデータベースは、必ずしも、共有されるいずれか特定のアプリのプライマリデータベースではありません。共有されたデータベースをプロモートするには、他のデータベースに使用した同じコマンドを使用します。
別のアプリとの Heroku Postgres インスタンスの共有を停止するには、heroku addons:detach
コマンドを使用します。
$ heroku addons:detach HEROKU_POSTGRESQL_BRONZE --app example-app
Detaching HEROKU_POSTGRESQL_BRONZE to postgresql-addon-name from example-app... done
Unsetting HEROKU_POSTGRESQL_BRONZE config vars and restarting example-app... done, v11
バージョンのサポート
PostgreSQL プロジェクトは毎年、新しいメジャーバージョンをリリースします。Heroku Postgres では、そのリリースの直後に各メジャーバージョンがサポートされます。Heroku Postgres のバージョンサポートについての詳細は、「Heroku Postgres Version Support」(Heroku Postgres のバージョンサポート) を参照してください。
パフォーマンス分析
パフォーマンス分析についての詳細は、「Heroku Postgres のパフォーマンス分析」を参照してください。
CLI の使用
CLI を使用した Heroku Postgres の管理についての詳細は、「CLI を使用した Heroku Postgres の管理」を参照してください。
Heroku Postgres への接続
Heroku Postgres への接続についての詳細は、「Heroku Postgres への接続」を参照してください。
外部リソースから共通ランタイムデータベースに接続するには、「外部リソースから Common Runtime Heroku Postgres データベースに接続する」を参照してください。
外部リソースから Private または Shield データベースに接続するには、「外部リソースから Private または Shield の Heroku Postgres データベースに接続する」を参照してください。
プラン間の移行
データベースプラン間の更新および移行に関するこの詳細なガイドを参照してください。
データの所在
データベースがプロビジョニングされると、そのデータベースに関連付けられたデータは、それが作成されるリージョン内で保管されます。ただし、Heroku Postgres に付随する一部のサービスや、このデータベース群を管理するシステムは、プロビジョニングされたデータベースと同じリージョン内に配置されません。
- ディザスタリカバリーの Postgres Continuous Protection は、データベースが置かれている同じリージョンにベースバックアップおよびログ先行書き込みを保管します。
- Common Runtime のログは、アプリが内部で実行中の同じリージョンにルーティングされます。たとえば、
us
リージョン内のアプリのログは、us
インフラストラクチャ経由でルーティングされます。 - Private Space 内のアプリのログは、そのスペース自体と同じリージョン内に留まります。たとえば、東京スペース内のアプリのログは、東京のインフラストラクチャ経由でルーティングされます。コンプライアンス要件が厳格なアプリを Shield Private Space にデプロイできます。ここでは Logplex の代わりに Private Space Logging を使用してログがルーティングされます。
- Heroku Postgres クエリおよびエラーのログ記録は、
heroku addons:create heroku-postgres:...
でデータベースを作成するときに--block-logs
フラグを使用することによってブロックできます。 - PG バックアップスナップショットは米国で保管されます。別のリージョン内の論理バックアップを取得するには、「Heroku Postgres の論理バックアップ」を参照してください。
- データクリップは米国で保管されます。
Heroku が利用しているサブプロセッサーの一覧と Heroku データが保存され、処理されている国の一覧については、「Salesforce Infrastructure & Sub-processors」 (Salesforce のインフラストラクチャとサブプロセッサー) ドキュメントを参照してください。
ログのブロック
アドオン作成時に、データベースに対して実行されるクエリのログ記録を防止するためにフラグを渡すことができます。このオプションが有効になっている場合は、データベースがプロビジョニングされた後に、それを無効にすることはできません。有効になった後、それを無効にするには、新しいデータベースへの移行が必要になります。
ログ内のクエリをブロックすると、アプリケーションをデバッグしたり、アプリケーションパフォーマンスをチューニングしたりするのに役立つ Heroku の機能が低下します。
$ heroku addons:create heroku-postgresql:standard-0 -a example-app --block-logs
アドオンの削除
Heroku Postgres データベースを削除するには、アドオンを破棄する必要があります。
$ heroku addons:destroy heroku-postgresql
同じ種類のデータベースが 2 つある場合は、その環境設定名を使用してアドオンを削除する必要があります。たとえば、HEROKU_POSTGRESQL_GRAY_URL
データベースを削除するには、次のコマンドを実行します。
$ heroku addons:destroy HEROKU_POSTGRESQL_GRAY
削除されたデータベースが DATABASE_URL
で使用されていたのと同じものであった場合は、その DATABASE_URL
環境設定がアプリで設定解除されます。
データベースをデプロビジョニングし、復元する場合は、指定された継続的な保護ロールバック期間内に復元できる可能性があります。この期間を過ぎると、データベースを復元できなくなる可能性が高くなります。サポートが必要な場合は、サポートチケットを開いてください。
デプロビジョニングする前にデータのバックアップを作成することをお勧めします。PG Backups を使用すると、データのスナップショットを作成し、バックアップをダウンロードして外部ストレージサービスに保存できます。デプロビジョニングする前にデータをエクスポートすることもできます。
サポート
Heroku Postgres のサポートとランタイムの問題はすべて、いずれかの Heroku サポートチャネル経由で送信してください。