このトピックでは、ApsaraDB RDS for PostgreSQL インスタンスのメジャーエンジンバージョンアップグレードのチェックレポートについて説明します。また、レポート内の一般的なエラーとそれらのエラーの解決策についても説明します。
関連するアップグレードドキュメント
チェック項目
コンソールの メジャーバージョンのアップグレード ページで、Upgrade Check タブをクリックし、対象のチェックレポートの 情報の表示 をクリックして詳細を表示します。
チェックレポートのチェックモジュールと発生する可能性のあるエラーは次のとおりです。
警告
チェック内容
RDS インスタンスのメジャーエンジンバージョンアップグレード中、RDS インスタンスの読み取り専用時間、メモリ、およびディスクリソースは、そのデータベースオブジェクトの数に影響されます。データベースオブジェクトの数が多すぎ、メモリとディスクリソースが不足している場合、アップグレードは失敗する可能性があります。この場合、システムはアップグレードチェックタブで推奨メモリ容量、推奨最小メモリ容量、および推奨ディスクサイズを提供します。
アップグレードに ゼロダウンタイム ソリューションを使用する場合、システムはシーケンス テーブルの数もチェックします。
推奨メモリ容量: メジャーエンジンバージョンアップグレード中、システムは複数のデータベースを含むインスタンスに対して同時アップグレード機能を提供できます。RDS インスタンスのメモリ容量が推奨メモリ容量以上の場合、RDS インスタンスは直ちにアップグレードされ、RDS インスタンスの読み取り専用時間が短縮されます。
推奨最小メモリ容量: RDS インスタンスのメモリ容量が推奨最小メモリ容量以上の場合、メモリリソースの不足によるアップグレードの失敗はありません。ただし、システムが RDS インスタンスの各データベースを順次アップグレードするため、RDS インスタンスの読み取り専用時間が延長される可能性があります。
推奨ディスクサイズ: メジャーエンジンバージョンアップグレード中、システムはすべてオブジェクト定義を一時的にコピーするため、inode の消費量が 2 倍になります。アップグレード中にディスクサイズが推奨ディスクサイズより小さい場合、アップグレードは失敗する可能性があります。
シーケンステーブル数のチェック (ゼロダウンタイムモードのみ): ゼロダウンタイムのメジャーエンジンバージョンアップグレード中、データは論理レプリケーションを通じて同期されます。ただし、論理レプリケーションはシーケンステーブルの同期をサポートしていません。したがって、シーケンステーブルの同期を完了するには、短いスイッチオーバー時間が必要です。ゼロダウンタイムのメジャーエンジンバージョンアップグレードでは、スイッチオーバー時間はシーケンステーブルの数によって決まります。
警告と解決策
ディスクの警告
警告フォーマット:
合計ディスク領域: {*} GB; 使用済みディスク: {*} GB; 使用済み inode: {*}; ノードあたりのバイト数: {*}; アップグレードに必要な最小ディスク領域: {*} GB。考えられる原因: オブジェクトが多すぎるため、十分なディスク領域が必要です。
解決策:
ブルーグリーンデプロイメントモードでは、新しい RDS インスタンスに、アップグレードに必要な最小ディスクサイズ以上のストレージ容量を指定する必要があります。
ローカルアップグレードモードでは、アップグレード前にアップグレードしたい RDS インスタンスのストレージ容量を拡張する必要があります。新しいストレージ容量は、アップグレードに必要な最小ディスクサイズ以上でなければなりません。詳細については、「設定の変更」をご参照ください。
メモリの警告
警告フォーマット:
現在のメモリ: {*} GB; 推奨メモリ: {*} GB; 最小メモリ: {*} GB。考えられる原因: オブジェクトが多すぎるため、アップグレード中のインスタンスの読み取り専用時間を最小限に抑えるために十分なメモリが必要です。
解決策:
ブルーグリーンデプロイメントの場合、アップグレードパラメーターを設定する際、新しいインスタンス仕様のメモリは最小メモリ要件以上でなければなりません。
ローカルアップグレードモードでは、インスタンスタイプによって提供されるメモリ容量が推奨メモリ容量より少ない場合、RDS インスタンスの仕様をアップグレードする必要があります。詳細については、「設定の変更」をご参照ください。
サブスクリプションの警告
警告フォーマット:
インスタンスにはレプリケーションスロットのサブスクライバーがあります。サブスクリプションデータの不整合を防ぐには、Alibaba Cloud ドキュメントを参照してください。考えられる原因: インスタンスにレプリケーションスロットのサブスクライバーがあります。
select * from pg_subscription;を実行して確認できます。解決策: 対処法については、「データベースのメジャーバージョンのアップグレード」をご参照ください。
シーケンスの警告
警告フォーマット:
シーケンステーブルの合計: {0}。シーケンステーブルが多すぎると、論理レプリケーションのメジャーバージョンアップグレードのスイッチオーバー時間が延長されます。考えられる原因: インスタンスにシーケンステーブルが含まれています。データベース内のすべてのシーケンステーブルは、
select * from pg_sequences;を実行して表示できます。解決策: シーケンステーブルが多すぎる場合は、インスタンスをクローンしてスイッチオーバー時間をテストし、要件を満たしていることを確認することをお勧めします。
エラー
チェック内容
システムは、不要なスーパーユーザーアカウントがバックグラウンドで作成されていないか、または標準アカウントに無効な暗号化メソッドが設定されていないかを確認します。
システムは、アップグレードチェックが失敗するかどうかを確認します。アップグレードチェックが失敗した場合、「pg_upgrade エラーログ」のエラーメッセージがチェックレポートに含まれます。
システムは、pgcrypto 拡張機能が pg_catalog スキーマにインストールされているかどうかを確認します。
(ゼロダウンタイムモードのみ) システムは、インスタンスのマイナーエンジンバージョンが 20250228 以降であるかどうかを確認します。
(ゼロダウンタイムモードのみ) システムは、論理レプリケーションの非互換性をチェックします。論理レプリケーションは特定のデータベースオブジェクトを同期できないため、これらのオブジェクトを持つインスタンスはゼロダウンタイムのメジャーバージョンアップグレードをサポートしません。非互換性が存在する場合、チェックレポートには「論理レプリケーションの非互換性」項目が表示されます。
エラーと解決策
アカウントエラー
エラーフォーマット:
無効なスーパーユーザーアカウント: {*}; 無効なアカウント: {*}; Alibaba Cloud ドキュメントを参照してください。考えられる原因: 冗長なスーパーユーザーアカウントまたは異常な標準アカウントがあります。
解決策:
冗長なスーパーユーザーアカウントについては、チケット を送信してアフターサービスに連絡し、削除を依頼してください。
異常な標準アカウントのパスワードをリセットします。
事前チェックエラー
エラーフォーマット:
pg_upgrade 事前チェックタスクが失敗しました。[pg_upgrade エラーログ] と [pg_upgrade 関連ファイルとエラー] を確認する必要があります。考えられる原因: 事前チェックが失敗しました。
解決策: ログの問題を解決するには、「pg_upgrade エラーログ」をご参照ください。
Pgcrypto 拡張機能エラー
エラーフォーマット:
pg_crypto 拡張機能がデータベース: {*} のスキーマ: pg_catalog にインストールされています。Alibaba Cloud ドキュメントを参照してください。考えられる原因: pgcrypto は、上位バージョンにのみ存在する関数を pg_catalog に作成するため、メジャーバージョンのアップグレードが失敗します。
解決策: 各データベースで pgcrypto 拡張機能を削除し、その後、pg_catalog 以外のスキーマで拡張機能を作成します。
マイナーバージョンエラー
エラーフォーマット:
ゼロダウンタイムのメジャーバージョンアップグレードには、最小マイナーバージョン 20250228 が必要です。考えられる原因: インスタンスのマイナーエンジンバージョンが低すぎます。
解決策: マイナーエンジンバージョンをアップグレードする。
Pg_upgrade エラーログ
チェック内容
システムは、新しいメジャーエンジンバージョンと互換性のない拡張機能やキーワードが存在するかどうかをチェックします。
一般的なエラー
Pg_upgrade 関連ファイルとエラー
loadable_libraries.txt
このファイルには、新しいメジャーエンジンバージョンと互換性のないライブラリが含まれています。これらのライブラリに基づいて、互換性のない拡張機能を特定できます。
次の情報は、一般的な互換性のない拡張機能と、非互換性の問題に対する解決策について説明しています。
tables_with_oids.txt
このファイルには、WITH OIDS で宣言されたテーブルのリストが表示されます。
論理レプリケーションの非互換性
チェック内容
システムは外部テーブルが存在するかどうかをチェックします。
システムは、プライマリキーまたは一意キーのないテーブルが存在するかどうかをチェックします。
システムはマテリアライズドビューが存在するかどうかをチェックします。
システムはラージオブジェクトが存在するかどうかをチェックします。
システムは、論理レプリケーションで禁止されている拡張機能が存在するかどうかをチェックします。
システムは、論理レプリケーションに関連するパラメーターの値が要件を満たしているかどうかをチェックします。
非互換性と解決策
外部テーブルの非互換性
エラーフォーマット:
データベース内の外部テーブル: {0}。データベースの合計: {1}。考えられる原因: 外部テーブルが存在します。
解決策: 外部テーブルを削除します。
インスタンスの各データベースで次の SQL 文を実行して、外部テーブルに関する情報を取得します。
SELECT COUNT(*) AS count, relkind FROM pg_class WHERE relkind IN ('f') GROUP BY relkind;次の SQL 文を実行して、外部テーブルを削除します。
DROP FOREIGN TABLE [ IF EXISTS ] name [ CASCADE | RESTRICT ];
詳細については、「コミュニティドキュメント」をご参照ください。
一意キーがないテーブルの非互換性
エラーフォーマット:
データベースにプライマリキーまたは一意キーのないテーブル: {0}。データベースの合計: {1}。考えられる原因: プライマリキーまたは一意キーのないテーブルが存在します。
解決策: テーブルにプライマリキーまたは一意キーを追加します。
インスタンスの各データベースで次の SQL 文を実行して、プライマリキーまたは一意キーのないテーブルに関する情報を取得します。
SELECT COUNT(*) AS count FROM information_schema.tables t LEFT JOIN information_schema.table_constraints tc ON t.table_name = tc.table_name AND t.table_schema = tc.table_schema AND (tc.constraint_type = 'PRIMARY KEY' OR tc.constraint_type = 'UNIQUE') JOIN pg_class c ON t.table_name = c.relname JOIN pg_namespace ns ON c.relnamespace = ns.oid AND ns.nspname = t.table_schema WHERE t.table_type = 'BASE TABLE' AND tc.constraint_type IS NULL AND t.table_schema NOT IN ('pg_catalog', 'information_schema') AND c.relreplident != 'f';次の SQL 文を実行して、対象テーブルの
REPLICA IDENTITYをFULLに設定します。ALTER TABLE name REPLICA IDENTITY FULL;次の SQL 文を実行して、対象テーブルにプライマリキーまたは一意キーを追加します。
--Primary key constraint ALTER TABLE name ADD CONSTRAINT constrain_name PRIMARY KEY (column_name); --Unique key constraint ALTER TABLE name ADD CONSTRAINT constrain_name UNIQUE (column_name);
詳細については、「コミュニティドキュメント」をご参照ください。
マテリアライズドビューの非互換性
エラーフォーマット:
データベース内のマテリアライズドビュー: {0}。データベースの合計: {1}。考えられる原因: マテリアライズドビューが存在します。
解決策: マテリアライズドビューを削除します。
インスタンスの各データベースで次の SQL 文を実行して、マテリアライズドビューを取得します。
SELECT COUNT(*) AS count, relkind FROM pg_class WHERE relkind IN ('m') GROUP BY relkind;次の SQL 文を実行して、マテリアライズドビューを削除します。
DROP MATERIALIZED VIEW IF EXISTS name;
ラージオブジェクトの非互換性
エラーフォーマット:
データベース内のラージオブジェクト: {0}。データベースの合計: {1}。考えられる原因: ラージオブジェクトが存在します。
解決策: ラージオブジェクトを削除します。
インスタンスの各データベースで次の SQL 文を実行して、ラージオブジェクトを取得します。
SELECT COUNT(*) AS count FROM pg_largeobject_metadata;次の SQL 文を実行して、ラージオブジェクトを削除します。
SELECT lo_unlink(largeobject_oid);
拡張機能の非互換性
エラーフォーマット:
データベースで論理レプリケーションが禁止されている拡張機能: {0}。データベースの合計: {1}。考えられる原因: 次の 4 つの禁止されている拡張機能が使用されています: 'pg_partman'、'pg_cron'、'pg_active'、および 'pg_logical'。
解決策: 互換性のない拡張機能を一時的に削除します。
インスタンスの各データベースで次の SQL 文を実行して、互換性のない拡張機能がインストールされているかどうかを確認します。
SELECT COUNT(*) AS count FROM pg_extension WHERE extname IN ('pg_partman', 'pg_cron', 'pg_active', 'pglogical');互換性のない拡張機能を一時的に削除します。
DROP EXTENSION extension_name;
パラメーターの非互換性
エラーフォーマット:
論理レプリケーションでは、wal_level を logical に、max_wal_sender と max_replication_slots を少なくとも {0} にする必要があります。インスタンスの wal_level は {1}、max_wal_sender は {2}、max_replication_slots は {3} です。考えられる原因: 3 つのパラメーターの値が要件を満たしていません。
解決策: パラメーターの値を変更します。変更を有効にするには、インスタンスの再起動が必要になる場合があることに注意してください。詳細については、「インスタンスのパラメーターを設定する」をご参照ください。
チェックレポートのフォーマットの説明
チェックレポートは中国語と英語で提供されます。