Deep-dive on the Next Gen Platform. Join the Webinar!

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
Hide categories

Categories

  • Heroku のアーキテクチャ
    • Dyno (アプリコンテナ)
      • Dyno Management
      • Dyno Concepts
      • Dyno Behavior
      • Dyno Reference
      • Dyno Troubleshooting
    • スタック (オペレーティングシステムイメージ)
    • ネットワーキングと DNS
    • プラットフォームポリシー
    • プラットフォームの原則
  • Developer Tools
    • コマンドライン
    • Heroku VS Code Extension
  • デプロイ
    • Git を使用したデプロイ
    • Docker によるデプロイ
    • デプロイ統合
  • 継続的デリバリーとインテグレーション
    • 継続的統合
  • 言語サポート
    • Node.js
      • Working with Node.js
      • Troubleshooting Node.js Apps
      • Node.js Behavior in Heroku
    • Ruby
      • Rails のサポート
      • Bundler の使用
      • Working with Ruby
      • Ruby Behavior in Heroku
      • Troubleshooting Ruby Apps
    • Python
      • Working with Python
      • Python でのバックグランドジョブ
      • Python Behavior in Heroku
      • Django の使用
    • Java
      • Java Behavior in Heroku
      • Working with Java
      • Maven の使用
      • Spring Boot の使用
      • Troubleshooting Java Apps
    • PHP
      • PHP Behavior in Heroku
      • Working with PHP
    • Go
      • Go の依存関係管理
    • Scala
    • Clojure
    • .NET
      • Working with .NET
  • データベースとデータ管理
    • Heroku Postgres
      • Postgres の基礎
      • Postgres スターターガイド
      • Postgres のパフォーマンス
      • Postgres のデータ転送と保持
      • Postgres の可用性
      • Postgres の特別なトピック
      • Migrating to Heroku Postgres
    • Heroku Data For Redis
    • Apache Kafka on Heroku
    • その他のデータストア
  • AI
    • Working with AI
  • モニタリングとメトリクス
    • ログ記録
  • アプリのパフォーマンス
  • アドオン
    • すべてのアドオン
  • 共同作業
  • セキュリティ
    • アプリのセキュリティ
    • 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

この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。

最終更新日 2024年05月29日(水)

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 層のデータベースでのみ動作します。

バージョンアップグレード:​ PostgreSQL のマイナー​バージョンを最新の使用可能なバージョンにアップグレードするために使用できます。

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

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

​一般には、フォロワーが再び指すだけであることや、メンテナンス実行のための Heroku で制御されるメカニズムのために、addons:upgrade​ の方がフォロワーの切り替えより推奨されます。
pg:copy​ 説明:​ すべての更新シナリオで動作します。非推奨 mini​ または basic​ データベース​に関連するすべてのバージョン変更のため、または Essential 層のデータベースを別の層のプランにアップグレードするために必要です。

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

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

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

addons:upgrade での更新

Essential 層

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

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

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

Standard 層およびそれ以上

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. メンテナンスモードを終了します。

フォロワーの切り替えにアプリのダウンタイムはほとんど必要ありません (1 分未満)。ただし、切り替えの前に、フォロワーデータベースの準備に数時間かかる (その間、アプリケーションは引き続きアクティブなまま) 場合があるため、それに応じて計画してください。

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

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

$ heroku addons:create heroku-postgresql:standard-2 --follow HEROKU_POSTGRESQL_LAVENDER_URL --app sushi
Creating heroku-postgresql:standard-2 on sushi... $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 sushi
=== 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 sushi... done

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

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

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

$ heroku pg:info --app sushi
=== 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 sushi
 ▸    WARNING: Destructive action
 ▸    postgresql-shaped-12345 will become writeable and no longer follow HEROKU_POSTGRESQL_LAVENDER. This cannot be undone.
 ▸
 ▸    To proceed, type sushi or re-run this command with --confirm sushi

> sushi
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 sushi
Promoting HEROKU_POSTGRESQL_WHITE_URL to DATABASE_URL on sushi... done

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

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

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

必要に応じて、新しいプライマリデータベースのフォロワーを作成してください。

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

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

 

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

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

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

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

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

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

$ heroku maintenance:off
Disabling maintenance mode for sushi... done

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

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

pg:copy での更新

pg:copy​ コマンドでは、サポートされているすべての Heroku Postgres プランおよびバージョン間での更新がサポートされます。さらに、これは 非推奨 mini​ または basic​Essential 層のデータベース​ に関連するバージョン変更のため、または 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