適用対象: Azure Database for PostgreSQL - フレキシブル サーバー
Azure Database for PostgreSQL フレキシブル サーバーでは、PostgreSQL バージョン 17 (プレビュー)、16、15、14、13、12、11 がサポートされています。 Postgres コミュニティでは、新機能を含む新しいメジャー バージョンを年に 1 回程度リリースしています。 さらに、各メジャー バージョンでは、マイナー リリースの形式で定期的なバグ修正を受け取ります。 マイナー バージョンのアップグレードには、既存のアプリケーションと下位互換性のある変更が含まれます。 Azure Database for PostgreSQL フレキシブル サーバー では、お客様のメンテナンス期間中に、マイナー バージョンが定期的に更新されます。
メジャー バージョンのアップグレードは、マイナー バージョンのアップグレードよりも複雑です。 既存のアプリケーションと下位互換性がない可能性がある内部変更や新機能が含まれる場合があります。
Azure Database for PostgreSQL フレキシブル サーバーには、クリックするだけでサーバーのインプレース メジャー バージョン アップグレードを実行する機能があります。 この機能では、サーバーにアクセスするユーザーとアプリケーションの中断を最小限に抑えることで、アップグレード プロセスを簡略化します。
インプレース アップグレードでは、メジャー バージョンのアップグレード後も、現在のサーバーのサーバー名やその他の設定が保持されます。 データの移行やアプリケーション接続文字列の変更は必要ありません。 インプレース アップグレードはデータ移行よりも迅速で、ダウンタイムが短縮されます。
アップグレード プロセス
インプレース メジャー バージョン アップグレードに関する重要な考慮事項をいくつか以下に示します。
- アップグレードを開始する前に、サーバーで少なくとも 10 から 20% 空きストレージが使用可能であることを確認します。 アップグレード プロセス中に、一時ログ ファイルとメタデータ操作によってディスク使用量が増加する可能性があります。 空き領域が不足すると、アップグレードエラーやロールバックの問題が発生する可能性があります。
- インプレース メジャー バージョン アップグレードのプロセス中に、Azure Database for PostgreSQL フレキシブル サーバーによって、事前チェック手順が実行され、アップグレード失敗の原因になる可能性がある潜在的な問題が特定されます。
- 事前チェックで非互換性が見つかった場合、アップグレードの事前チェックが失敗したことを示すログ イベントがエラー メッセージと共に作成されます。
- 事前チェックが成功した場合、Azure Database for PostgreSQL フレキシブル サーバーによって、サービスが停止され、アップグレード開始直前の暗黙的なバックアップが作成されます。 アップグレード エラーが発生した場合、サービスではこのバックアップを使用して、データベース インスタンスを以前のバージョンに復元できます。
- Azure Database for PostgreSQL フレキシブル サーバーでは、pg_upgrade ツールを使用してインプレース メジャー バージョン アップグレードが実行されます。 このサービスでは、バージョンをスキップし、新しいバージョンに直接アップグレードする柔軟性が提供されます。
- 高可用性 (HA) が有効なサーバーのインプレース メジャー バージョン アップグレード中に、サービスによって HA が無効化され、プライマリ サーバーでアップグレードが実行され、アップグレードの完了後に HA が再度有効化されます。
- ほとんどの拡張機能は、インプレース メジャー バージョン アップグレード中に新しいバージョンに自動的にアップグレードされますが、一部例外があります。
- Azure Database for PostgreSQL フレキシブル サーバーのインプレース メジャー バージョン アップグレードのプロセスでは、サポートされている最新のマイナー バージョンが自動的にデプロイされます。
- インプレース メジャー バージョンのアップグレードはオフライン操作です。つまり、プロセス中にサーバーを使用できなくなります。 ほとんどのアップグレードは 15 分以内に完了しますが、実際の期間はデータベースのサイズと複雑さによって異なります。 具体的には、必要な時間は、PostgreSQL インスタンス内のオブジェクト (テーブル、インデックス、スキーマ) の数に直接比例します。 スキーマが大きいか複雑な場合は、アップグレード時間が長くなる可能性があります。
- アップグレード前の長時間実行トランザクションや高いワークロードにより、データベースのシャットダウンにかかる時間とアップグレードの所要時間が長くなる可能性があります。
- インプレース メジャー バージョン アップグレードが成功した後、自動で以前のバージョンに戻す方法はありません。 ただし、アップグレード前の特定の時点へのポイントインタイム リカバリー (PITR) を実行すると、以前のバージョンのデータベース インスタンスを復元できます。
- Azure Database for PostgreSQL フレキシブル サーバーは、アップグレード時にデータベースのスナップショットを取得します。 スナップショットはアップグレードの開始前に取得されます。 アップグレードに失敗した場合、システムはデータベースを自動的にスナップショットの状態に復元します。
- PostgreSQL 16 はロールベースのセキュリティ対策を導入しています。 Azure Database for PostgreSQL フレキシブル サーバーでメジャー バージョンをアップグレードした後、サーバー上に作成された最初のユーザー (ADMIN オプションが付与されます) は、重要なメンテナンス操作のために他のロールに対する管理特権を持つようになります。
アップグレードに関する考慮事項と制限事項
インプレース メジャー バージョンのアップグレード中に事前チェック操作が失敗した場合、アップグレードは詳細なエラー メッセージでブロックされます。 アップグレードの失敗や予期しない動作の原因となる既知の制限事項を次に示します。
サポートされていないサーバー構成
- インプレイス アップグレード時に読み取りレプリカはサポートされません。 プライマリ サーバーをアップグレードする前に、読み取りレプリカを削除する必要があります。 アップグレード後、レプリカを作成し直すことができます。
- ネットワーク トラフィック ルールによって、アップグレード操作がブロックされる場合があります。
- フレキシブル サーバーが仮想ネットワーク内のポート 5432 と 6432 と Azure Storage (ログ アーカイブ用) でトラフィックを送受信できることを確認します。
- ネットワーク セキュリティ グループ (NSG) がこのトラフィックを制限する場合、HA はアップグレード後に自動的に再び有効になりません。 NSG ルールを手動で更新し、HA を再度有効にする必要がある場合があります。
- インプレイス メジャー バージョン アップグレード時に論理レプリケーション スロットはサポートされません。
- SSDv2 ストレージを使用するサーバーは、メジャー バージョンのアップグレードの対象ではありません。
- メジャー バージョンのアップグレード中、
pg_stat_activity
に依存するビューはサポートされません。
拡張機能の制限事項
インプレースでのメジャーバージョンアップグレードは、すべてのPostgreSQL拡張機能をサポートしているわけではありません。 サポートされていない拡張機能が見つかった場合、事前チェック中にアップグレードは失敗します。
- 次の拡張機能は、どのバージョンの PostgreSQL においてもサポートされていません:
timescaledb
、dblink
、orafce
、pg_partman
、postgres_fdw
- アップグレード ターゲットが PostgreSQL 16 以上の場合、次の拡張機能はサポートされません。
pgrouting
- PostgreSQL 17 にアップグレードする場合、次の拡張機能はサポートされていません:
pgrouting
、age
、azure_ai
、hll
、pg_diskann
pg_repack
、hypopg
などの拡張機能はインプレース アップグレードをサポートしていないため、アップグレードの前に削除し、後で再作成する必要があります。 これらの拡張機能は非永続的であり、アップグレード後に再構成しても安全です。
アップグレードする前に、これらの拡張機能を azure.extensions サーバー パラメーターから削除する必要があります。 存在する場合、アップグレードはブロックされます。
PostGIS 固有の考慮事項
PostGIS または依存拡張機能を使用している場合は、search_path サーバー パラメーターを次のように構成する必要があります。
- PostGIS に関連するスキーマ
- 依存拡張機能(
postgis
、postgis_raster
、postgis_sfcgal
、postgis_tiger_geocoder
、postgis_topology
、address_standardizer
、address_standardizer_data_us
、fuzzystrmatch
- search_pathを正しく構成しないと、アップグレードの失敗やアップグレード後のオブジェクトの破損につながる可能性があります。
その他のアップグレードに関する考慮事項
- ラージ オブジェクト (LOs): 何百万もの大きなオブジェクト (
pg_largeobject
に格納されている) を持つデータベースでは、メモリ使用量やログ ボリュームが多いためにアップグレード エラーが発生する可能性があります。 vacuumlo ユーティリティを使用して未使用の LO をクリーンアップし、多くの LO がまだ使用されている場合は、アップグレード前にサーバーをスケールアップすることを検討してください。
Warnung
vacuumlo には注意が必要です。 vacuumlo
は、従来の参照列 (oid、lo) に基づいて孤立したラージ オブジェクトを識別します。 アプリケーションでカスタム参照型または間接参照型を使用している場合、有効なラージ オブジェクトが誤って削除される可能性があります。 さらに、 vacuumlo
では、特に何百万ものラージ オブジェクトを持つデータベースで、CPU、メモリ、IOPS が大幅に消費される可能性があります。 メンテナンス期間中に実行し、最初に非 prod でテストします。
アップグレード後
メジャー バージョンのアップグレードが完了したら、各データベースで ANALYZE
コマンドを実行して、pg_statistic
テーブルを更新することをお勧めします。 統計が見つからないか古い場合、クエリ プランが不適切になり、パフォーマンスが低下し、過剰なメモリが占有される可能性があります。
postgres=> analyze;
ANALYZE
アップグレード ログの表示
メジャー バージョン アップグレード ログ (PG_Upgrade_Logs
) を使用すると、詳細なサーバー ログに直接アクセスできます。 PG_Upgrade_Logs
のアップグレード プロセスへの統合は、新しい PostgreSQL バージョンへのよりスムーズで透過的な移行を確実に行うのに役立ちます。
次のサーバー パラメーターを使用して、サーバー ログと同じ方法でメジャー バージョン アップグレード ログを構成できます。
- この機能を有効にするには、
logfiles.download_enable
をON
に設定します。 - ログ ファイルの保持期間を日数で定義するには、
logfiles.retention_days
を使用します。
アップグレード ログの設定
PG_Upgrade_Logs
を初めて使う場合は、PostgreSQL サーバー ログとメジャー バージョン アップグレード ログの取り込みを構成することができます。
アップグレード ログには、サーバー ログの UI を使用してアクセスできます。 そこで、PostgreSQL メジャー バージョンのアップグレードの進行状況と詳細をリアルタイムで監視できます。 この UI では、ログを表示するための一元的な場所が提供されるため、アップグレード プロセスをより簡単に追跡およびトラブルシューティングできます。
アップグレード ログを使用する利点
- 洞察力のある診断:
PG_Upgrade_Logs
では、アップグレード プロセスに関する貴重な洞察が提供されます。 実行された操作に関する詳細情報がキャプチャされ、発生したエラーまたは警告が強調表示されます。 このレベルの詳細情報は、アップグレード中に発生する可能性のある問題の診断と解決に有効であり、移行がよりスムーズになります。 - 効率的なトラブルシューティング: これらのログに直接アクセスすることで、アップグレードの潜在的な障害を迅速に特定して対処し、ダウンタイムを短縮して、運用に対する影響を最小限に抑えることができます。 このログは、より効率的で効果的な問題解決を可能にすることで、重要なトラブルシューティング ツールとして機能します。
注
インプレース メジャー バージョン アップグレードは、自動移行されたサーバーでサポートされています。 自動移行されたサーバーでインプレース メジャー バージョンのアップグレードが成功した後、ユーザー名の形式 username@servername はサポートされなくなります。 代わりに、標準形式の ユーザー名を使用する必要があります。 認証の問題を回避するには、アップグレード後に更新されたユーザー名形式を使用するように、アプリケーションとスクリプト内のすべての接続文字列を慎重に確認して更新します。