Skip Navigation
Show nav
Dev Center
  • Get Started
  • ドキュメント
  • Changelog
  • Search
  • Get Started
    • Node.js
    • Ruby on Rails
    • Ruby
    • Python
    • Java
    • PHP
    • Go
    • Scala
    • Clojure
    • .NET
  • ドキュメント
  • Changelog
  • More
    Additional Resources
    • Home
    • Elements
    • Products
    • Pricing
    • Careers
    • Help
    • Status
    • Events
    • Podcasts
    • Compliance Center
    Heroku Blog

    Heroku Blog

    Find out what's new with Heroku on our blog.

    Visit Blog
  • Log inorSign up
View categories

Categories

  • Heroku のアーキテクチャ
    • コンピューティング (dyno)
      • dyno の管理
      • dyno の概念
      • dyno の動作
      • dyno の参照資料
      • dyno のトラブルシューティング
    • スタック (オペレーティングシステムイメージ)
    • ネットワーキングと DNS
    • プラットフォームポリシー
    • プラットフォームの原則
  • 開発者ツール
    • コマンドライン
    • Heroku の VS Code 拡張機能
  • デプロイ
    • Git を使用したデプロイ
    • Docker によるデプロイ
    • デプロイ統合
  • 継続的デリバリーとインテグレーション
    • 継続的統合
  • 言語サポート
    • Node.js
      • Node.js アプリのトラブルシューティング
      • Heroku での Node.js の動作
      • Node.js の操作
    • Ruby
      • Rails のサポート
      • Bundler の使用
      • Ruby の操作
      • Heroku での Ruby の動作
      • Ruby アプリのトラブルシューティング
    • Python
      • Python の操作
      • Python でのバックグラウンドジョブ
      • Heroku での Python の動作
      • Django の使用
    • Java
      • Heroku での Java の動作
      • Java の操作
      • Maven の使用
      • Spring Boot の使用
      • Java アプリのトラブルシューティング
    • PHP
      • PHP の操作
      • Heroku での PHP の動作
    • Go
      • Go の依存関係管理
    • Scala
    • Clojure
    • .NET
      • Working with .NET
  • データベースとデータ管理
    • Heroku Postgres
      • Postgres の基礎
      • Postgres スターターガイド
      • Postgres のパフォーマンス
      • Postgres のデータ転送と保持
      • Postgres の可用性
      • Postgres の特別なトピック
      • Heroku Postgres への移行
    • Heroku Key-Value Store
    • Apache Kafka on Heroku
    • その他のデータストア
  • AI
    • Vector Database
    • Working with AI
    • Heroku Inference
      • AI Models
      • Inference Essentials
      • Heroku Inference Quick Start Guides
      • Inference API
    • Model Context Protocol
  • モニタリングとメトリクス
    • ログ記録
  • アプリのパフォーマンス
  • アドオン
    • すべてのアドオン
  • 共同作業
  • セキュリティ
    • アプリのセキュリティ
    • ID と認証
      • シングルサインオン (SSO)
    • Private Space
      • インフラストラクチャネットワーキング
    • コンプライアンス
  • Heroku Enterprise
    • Enterprise Accounts
    • Enterprise Team
    • Heroku Connect (Salesforce 同期)
      • Heroku Connect の管理
      • Heroku Connect のリファレンス
      • Heroku Connect のトラブルシューティング
  • パターンとベストプラクティス
  • Heroku の拡張
    • Platform API
    • アプリの Webhook
    • Heroku Labs
    • アドオンのビルド
      • アドオン開発のタスク
      • アドオン API
      • アドオンのガイドラインと要件
    • CLI プラグインのビルド
    • 開発ビルドパック
    • Dev Center
  • アカウントと請求
  • トラブルシューティングとサポート
  • Salesforce とのインテグレーション
  • データベースとデータ管理
  • Heroku Postgres
  • Postgres の基礎
  • Heroku Postgres データベースのプランまたはインフラストラクチャの変更

Heroku Postgres データベースのプランまたはインフラストラクチャの変更

日本語 — Switch to English

最終更新日 2025年02月26日(水)

Table of Contents

  • addons:upgrade での変更
  • フォロワーの切り替えでの変更
  • pg:copy での変更
  • 古いプライマリデータベースのプロビジョニング解除

この記事では、Heroku Postgres データベースのプランまたは基礎となるインフラストラクチャを変更するために使用可能な方法について説明します。

この記事では、PostgreSQL プランとインフラストラクチャ​を変更するプロセスについて説明しますが、これにより場合によっては PostgreSQL バージョンもアップグレードされる可能性があります。PostgreSQL バージョン​のアップグレードのみを行いたい場合は、「Heroku Postgres データベースのバージョンのアップグレード​」を参照してください。

Heroku では、Postgres プランとインフラストラクチャ​を変更するための 3 つの方法がサポートされています。いずれの方法でも、プロセス中のデータ損失を防ぐために、ある程度のアプリケーションのダウンタイムが必要です。

プラン変更方法 説明
heroku addons:upgrade​ 説明:​ 主要な PostgreSQL バージョンを維持しながら、本番データベースのプランとインフラストラクチャを更新します。

互換性のあるプラン:​ すべての Heroku Postgres プランで動作します。このコマンドを使用すると、Essential 層のデータベース​をその層内の別のプランに変更できます。Essential 層のデータベースを他の層のプランに変更するには、代わりに pg:copy​ を使用します。

必要なダウンタイム:​ 代替データベースを準備するための最大数時間 (その間、アプリケーションをアクティブなままにすることができる) と、切り替え中の 1 分未満のダウンタイムが必要です。

フォロワーデータベース:​ すべてのデータベースフォロワーが新しいプライマリを再び指すようにします。
フォロワーの切り替え​ 説明:​ 主要な PostgreSQL バージョンを維持しながら、本番データベースのプランとインフラストラクチャを更新します。

互換性のあるプラン:​ Standard、Premium、Private、または Shield 層のデータベースでのみ動作します。

必要なダウンタイム:​ フォロワーデータベースを準備するための最大数時間 (その間、アプリケーションをアクティブなままにすることができる) と、切り替え中の 1 分未満のダウンタイムが必要です。

フォロワーデータベース:​ 新しいプライマリを指すようにするには、フォロワーの再作成が必要です。

​一般には、フォロワーが再び指すだけであることや、メンテナンス実行のための Heroku で制御されるメカニズムのために、addons:upgrade​ の方がフォロワーの切り替えより推奨されます。
pg:copy​ 説明:​ プラン変更のあらゆるシナリオで動作します。Essential 層のデータベースプランを別の層のプランに変更する場合に必要です。

バージョンアップグレード:​ メジャー​ PostgreSQL バージョンをアップグレードするために使用できます。

必要なダウンタイム:​ GB あたり約 3 分のダウンタイムが必要ですが、この量は大きく変動する場合があります。

フォロワーデータベース:​ 新しいプライマリを指すようにするには、フォロワーの再作成が必要です。

addons:upgrade での変更

Essential 層

Essential 層のデータベースプランを同じ層の別のプランに変更するには、addons:upgrade​ を実行すると、定期的なメンテナンスを待ったり実行したりすることなく、すぐにプラン変更が開始されます。

$ heroku addons:upgrade HEROKU_POSTGRESQL_CRIMSON_URL heroku-postgresql:essential-1 -a example-app
Changing HEROKU_POSTGRESQL_CRIMSON_URL on example-app from heroku-postgresql:essential-0 to heroku-postgresql:essential-1... done, ~$0.012/hour (max $9/month)
Your database's plan is being changed from essential-0 to essential-1.

addons:upgrade​ を実行して essential-*​ プランを変更するとデータベースが読み取り専用モードになるため、プラン変更中に書き込みは行われません。プラン変更を開始する前にアプリをメンテナンスモード​にして、プロセス中にデータベースに新しいデータが書き込まれないようにすることもできます。プラン変更により、選択した Essential プランの新しいデータベースにデータが転送され、環境設定が新しい Essential データベースを指すように更新されます。

Standard 層およびそれ以上

addons:upgrade​ を使用して、Standard 層以上のデータベース​を Essential 層のデータベースに変更することはできません。代わりに、pg:copy​ を使用できます。

addons:upgrade​ を使用してデータベースプランを変更するには、次の手順を実行します。

  1. データベース上で heroku addons:upgrade​ を実行します。
  2. スケジュールされたメンテナンスを実行する (または待機する)

addons:upgrade​ を使用して変更する場合、アプリのダウンタイムはほとんど発生しません (1 分未満)。ただし、切り替えの前に、代替データベースの準備に数時間かかる (その間、アプリケーションは引き続きアクティブなまま) 場合があるため、それに応じて計画してください。

1.​heroku addons:upgrade​ コマンドを実行する

このコマンドはデータベースのプラン変更を準備します。このプロセスは即時的ではなく、大規模なデータベースの場合は数時間かかる可能性があります。

$ heroku addons:upgrade HEROKU_POSTGRESQL_LAVENDER_URL heroku-postgresql:premium-4 -a example-app
Changing HEROKU_POSTGRESQL_LAVENDER_URL on tc-data-test from heroku-postgresql:standard-0 to heroku-postgresql:premium-4... done, ~$1.042/hour (max $750/month)
Your database's plan is being changed.
This triggers a maintenance that you can run with `heroku data:maintenances:run`.

データベースでプラン変更の準備ができると、データベースの次回のスケジュールされたメンテナンスに関するメールを受信します。

2. スケジュールされたメンテナンスを実行する (または待機する)

準備ができると、addons:upgrade​ コマンドはデータベースのメンテナンスをスケジュール設定して、データベースのプラン変更を実行します。

このプロセスは、「Heroku Postgres のメンテナンスウィンドウ​」で説明されているメンテナンスメカニズムと同じです。

データベースでメンテナンスを実行する準備ができたら、「Running maintenance manually​」(手動でのメンテナンス実行) を参照してください。メンテナンスが完了すると、データベースは、新しいプランに一致するハードウェア上で動作します。

データベースに 1 つ以上のフォロワーがある場合は、プラン変更メンテナンスが発生すると、Heroku はフォロワーの接続先を代替データベースに変更しようとします。フォロワーが代替データベースを指すようにするには、フォロワーデータベースを再起動する必要があります。状況によって、フォロワーが代替データベースを指すようにすることができない場合は、別の代替データベースが自動的に準備されてプロモートされます。

プラン変更を停止する場合は、このヘルプ記事​を参照してください。

フォロワーの切り替えでの変更

フォロワーの切り替えを伴うプランの変更には、次の手動手順が必要です。

  1. 変更先のプランでフォロワーデータベース​をプロビジョニングし、それがプライマリデータベースに追いつくまで待ちます。プランの基礎となるハードウェアを更新するための変更を行う場合は、データベースの現在のプランと同じプランを選択します。
  2. アプリをメンテナンスモードにします。
  3. フォロワーをフォロー解除して、プライマリデータベースにプロモートします。
  4. メンテナンスモードを終了します。

方法をより自動化する場合は、addons:upgrade​ を使用してください。

切り替え前にフォロワーを準備し、アプリをメンテナンスモードにする一連の手動作業を完了するには数時間かかることがあるため、事前に計画を立ててください。手順を準備した後でフォロワーを切り替えると、通常、アプリのダウンタイムが 1 分未満で完了します。

1. フォロワーデータベースをプロビジョニングする

データベースのフォロワーを作成し、そのフォロワーがプライマリデータベースに追いつくまで待ちます。

addons:create​ の例は Heroku CLI v9.0.0​ 以降の構文に従っています。v8.11.5 以前を使用している場合は、次のコマンドを使用してください。

$ heroku addons:create heroku-postgresql:standard-2 --follow HEROKU_POSTGRESQL_LAVENDER_URL --app example-app
$ heroku addons:create heroku-postgresql:standard-2 --app example-app -- --follow HEROKU_POSTGRESQL_LAVENDER_URL
Creating heroku-postgresql:standard-2 on example-app... $200/month
! WARNING: Follower will become available for read-only queries when up-to-date.
Use `heroku pg:wait` to track status.
postgresql-shaped-12345 is being created in the background. The app will restart when complete...
Use heroku addons:info postgresql-shaped-12345 to check creation progress
$ heroku addons:wait
Creating postgresql-shaped-12345... done
Created postgresql-shaped-12345 as HEROKU_POSTGRESQL_WHITE_URL

フォロワーは、プライマリデータベースまで 200 コミット以内のときに “追いついた” と見なされます。フォロワーが遅れているコミット数は、pg:info​ コマンドを使用して確認できます (フォロワーデータベースの Behind By​ 行を参照)。

$ heroku pg:info --app example-app
=== HEROKU_POSTGRESQL_LAVENDER
Plan:        Standard 0
Status:      Available
...
=== HEROKU_POSTGRESQL_WHITE
Plan:        Standard 2
Status:      Available
...
Following:   HEROKU_POSTGRESQL_LAVENDER (DATABASE_URL)
Behind By:   125 commits

2. データベースの書き込みを防止するためにメンテナンスモードにする

プラン変更プロセス中に、新しいデータは新しいデータベースに転送されないため、現在のプライマリデータベースに新しいデータが書き込まれないようにすることが重要です。これを行うには、アプリをメンテナンスモード​にします。スケジューラージョブも実行されている場合は、これを無効にします。

メンテナンスモードでは、dyno が自動的にはスケールダウンされません。どの接続もデータベースにデータを書き込んでいないようにするために、Web dyno や Web 以外の dyno をスケールダウンします (heroku ps:scale worker=0​ など)。

 

変更するデータベースが Heroku Connect を使用している場合、この時点で同期を一時停止し、接続がデータベースへのデータの書き込みを行わないようにしてください。手順は、「Heroku Connect: データベースのアップグレード​」に記載されています。

 

プラン変更プロセスのこの時点から、アプリケーションは使用できなくなります。

$ heroku maintenance:on
Enabling maintenance mode for example-app... done

3. フォロワーデータベースをプロモートする

メンテナンスモードになり、プライマリデータベースに追加データが書き込まれていない状態になったので、フォロワーデータベースをプロモートして現在のプライマリデータベースから引き継ぐことができます。

フォロワーデータベースがプライマリに​完全に​追いつくまで待ちます (0 commits​ 遅れていることで示される)。

$ heroku pg:info --app example-app
=== HEROKU_POSTGRESQL_LAVENDER_URL
Plan:        Standard 0
Status:      available
...
=== HEROKU_POSTGRESQL_WHITE_URL
Plan:        Standard 2
Status:      available
...
Following:   HEROKU_POSTGRESQL_LAVENDER_URL (DATABASE_URL)
Behind By:   0 commits

フォロワーが追いつき、新しいデータが生成されなくなったら、unfollow​ コマンドを発行して、フォロワーを完全な書き込み可能なデータベースに変換します。

$ heroku pg:unfollow HEROKU_POSTGRESQL_WHITE_URL --app example-app
 ▸    WARNING: Destructive action
 ▸    postgresql-shaped-12345 will become writeable and no longer follow HEROKU_POSTGRESQL_LAVENDER. This cannot be undone.
 ▸
 ▸    To proceed, type example-app or re-run this command with --confirm example-app

> example-app
postgresql-shaped-12345 unfollowing... done

フォロー解除が成功すると、pg:info​ により、データベースがその親のフォークになったことが示されます (Forked From: HEROKU_POSTGRESQL_LAVENDER​)。

新しいデータベースで読み書き可能な接続の準備ができると false​ を返す SQL コマンド SELECT pg_is_in_recovery();​ を実行することによって、データベースが読み取り専用モードでなくなったことも確認できます。

次に、それをプロモートして、アプリケーションによって使用されるプライマリデータベース (場所は DATABASE_URL​) として設定します。

$ heroku pg:promote HEROKU_POSTGRESQL_WHITE_URL --app example-app
Promoting HEROKU_POSTGRESQL_WHITE_URL to DATABASE_URL on example-app... done

これで、フォロワーデータベースがプライマリデータベースになりました (ただし、アプリケーションはまだ新しいリクエストを受信していない)。

元のプライマリデータベースが複数のアプリにアタッチされていた場合は、heroku addons:attach​ を使用して新しいデータベースをこれらのアプリにアタッチする必要があります。

切り替えの後、元のプライマリデータベースの​他の​フォロワーは、新しいプライマリのフォローを自動的に開始するようにはなりません​。新しいプライマリデータベースを指すようにフォロワーを再作成する必要があります。

必要に応じて、新しいプライマリデータベースのフォロワーを作成してください。Heroku CLI v9.0.0 以降を使用している場合は、次のコマンドを実行します。

$ heroku addons:create heroku-postgresql:standard-0 -a example-app -- --follow DATABASE_URL

Heroku CLI v8.11.5 以前を使用している場合は、次のコマンドを実行します。

$ heroku addons:create heroku-postgresql:standard-0 --follow DATABASE_URL -a example-app

古いフォロワーが必要なくなったら、必ずプロビジョニング解除してください。

 

古いプライマリが接続プールを使用していて、デフォルト名の DATABASE_CONNECTION_POOL​ でアタッチされていた場合、プロモートにより、接続プーラーは同じ名前 DATABASE_CONNECTION_POOL​ で新しいプライマリに再アタッチされます。

デフォルト以外の名前のアタッチメントは再アタッチされません。新しいプライマリでも、古いプライマリと同じデフォルト以外の名前で接続プールを使用する場合は、新しいプライマリで接続プールをアクティブ化する必要があります。

$ heroku pg:connection-pooling:attach DATABASE_URL --as MY_DATABASE_CONNECTION_POOL -a example-app

4. メンテナンスモードを終了する

通常のアプリケーション動作を再開するには、Web dyno 以外のスケールを元のレベルに戻します。たとえば、worker​ dyno を以前スケールダウンした場合、heroku ps:scale worker=1​ を使用してそれを今度は元の状態にスケールアップします。

最後に、メンテナンスモードをオフにします。

$ heroku maintenance:off
Disabling maintenance mode for example-app... done

これで、アプリケーションはデータベースインスタンスへのリクエストを受信するようになりました。heroku pg:info​を実行して、メンテナンスモードがオフになっていることを確認できます。DATABASE_URL​で示されるデータベースはプライマリデータベースとみなされます。

Heroku Postgres データベースが Heroku アプリケーションに接続されていない場合は、HEROKU_POSTGRESQL_WHITE_URL​ を取得し、それをプライマリデータベースとして使用するようにアプリケーションを更新する必要があります。

pg:copy での変更

pg:copy​ コマンドは、サポートされているすべての Heroku Postgres プラン間のプラン変更とバージョンアップグレードをサポートしています。さらに、Essential 層のデータベースを別の層のプランに変更するにはこの方法のみが唯一サポートされています。

pg:copy​ を使用するための手順は、「Upgrading Heroku Postgres Databases​」(Heroku Postgres データベースのアップグレード) で参照できます。

古いプライマリデータベースのプロビジョニング解除

フォロワーの切り替えまたは pg:copy​ のどちらかでデータベースプランを変更した後、古いプライマリデータベースを必ずプロビジョニング解除してください。

$ heroku addons:destroy HEROKU_POSTGRESQL_LAVENDER_URL

古いプライマリデータベースに関連付けられていたデータクリップを新しいデータベースに再割り当てする必要があります。すべての回復可能なデータクリップを解決するには、「Dataclip recovery​」(データクリップのリカバリ) の手順に従ってください。

関連カテゴリー

  • Postgres の基礎
適切な Heroku Postgres プランの選択 Heroku Postgres のプラン容量オーバー

Information & Support

  • Getting Started
  • Documentation
  • Changelog
  • Compliance Center
  • Training & Education
  • Blog
  • Support Channels
  • Status

Language Reference

  • Node.js
  • Ruby
  • Java
  • PHP
  • Python
  • Go
  • Scala
  • Clojure
  • .NET

Other Resources

  • Careers
  • Elements
  • Products
  • Pricing
  • RSS
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku Blog
    • Heroku News Blog
    • Heroku Engineering Blog
  • Twitter
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku
    • Heroku Status
  • Github
  • LinkedIn
  • © 2025 Salesforce, Inc. All rights reserved. Various trademarks held by their respective owners. Salesforce Tower, 415 Mission Street, 3rd Floor, San Francisco, CA 94105, United States
  • heroku.com
  • Legal
  • Terms of Service
  • Privacy Information
  • Responsible Disclosure
  • Trust
  • Contact
  • Cookie Preferences
  • Your Privacy Choices