背景
Amazon RDS 上で利用している PostgreSQL 13.12 を、メジャーバージョンの 14.10 へアップグレードしたので、その手順をまとめます。
目次
1. はじめに
今回は PostgreSQL 13.12 を一つ上の 14系 にアップグレードすることを目的としました。
現在利用している PostgreSQL からアップグレード可能な対象のバージョンについては、以下の公式ドキュメントから確認できます。
PostgreSQL のメジャーバージョンアップグレードの選択
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.PostgreSQL.html#USER_UpgradeDBInstance.PostgreSQL.MajorVersion
2. 実施方法
Amazon RDS では、13 から 14 のようなメジャーバージョンのアップグレードは自動的に適用されません。
そのため、手動でのアップグレードが必要となりますが、大まかな手順は以下の公式ドキュメントから確認できます。
今回はこちらのドキュメントを元に、手順をまとめていきます。
メジャーバージョンのアップグレードを実施する方法
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.PostgreSQL.html#USER_UpgradeDBInstance.PostgreSQL.MajorVersion.Process
2-1. パラメータグループの作成
まず最初に、アップグレード先のバージョンに対応する、パラメータグループを作成します。
マネジメントコンソールから RDS を選択して、「パラメータグループ」>「パラメータグループの作成」を開きます。
上記の設定項目は、全て必須となります。
- パラメータグループファミリー:アップグレード先を指定
- タイプ:利用するものを選択
- グループ名:自由に記載
- 説明:自由に記載
2-2. データベースクラスの互換性確認
現行のデータベース(PostgreSQL 13.12)に設定しているインスタンスクラスが、アップグレード先(PostgreSQL 14.10)と互換性があることを確認します。
互換性の一覧については、以下の公式ドキュメントから確認できます。
DB インスタンスクラスでサポートされている DB エンジン
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Concepts.DBInstanceClass.html#Concepts.DBInstanceClass.Support
2-3. 準備済みのトランザクションとreg データ型の存在確認
- 準備済みのトランザクションの確認
アップグレードの実行前に、準備済みのトランザクションがデータベース上に存在しないことを確認します。
PostgreSQL に接続し、以下のSQL文を実行してください。
SELECT count(*) FROM pg_catalog.pg_prepared_xacts;
※準備済みのトランザクションが存在していた場合、コミットまたはロールバックを実行してください。
- reg* データ型の確認
同様に、データベース上でreg* データ型が使用されていないことを確認します。
以下のSQL文を実行してください。
SELECT count(*) FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n, pg_catalog.pg_attribute a
WHERE c.oid = a.attrelid
AND NOT a.attisdropped
AND a.atttypid IN ('pg_catalog.regproc'::pg_catalog.regtype,
'pg_catalog.regprocedure'::pg_catalog.regtype,
'pg_catalog.regoper'::pg_catalog.regtype,
'pg_catalog.regoperator'::pg_catalog.regtype,
'pg_catalog.regconfig'::pg_catalog.regtype,
'pg_catalog.regdictionary'::pg_catalog.regtype)
AND c.relnamespace = n.oid
AND n.nspname NOT IN ('pg_catalog', 'information_schema');
※reg* データ型が使用されていた場合、削除を実行してください。
2-4. 論理レプリケーションスロットの削除
アップグレードの実行前に、論理レプリケーションスロットがデータベース上に存在しないことを確認します。
存在する場合は、使用されていないことを確認した上で、以下のSQL文を実行して削除してください。
SELECT * FROM pg_replication_slots;
SELECT pg_drop_replication_slot(slot_name);
2-5. バックアップの実行
アップグレードの実行前に、データベースのバックアップを実行します。
対象のデータベースを選択して、アクションタブから「スナップショットの取得」を実行します。
※スナップショットの取得には、データベースを開始しておく必要があります。
2-6. 特定のエクステンションの更新
メジャーバージョンをスキップしてアップグレードする場合、特定のエクステンションを更新する必要があります。
メジャーバージョンのスキップとは、例えば バージョン 9.5.x または 9.6.x から バージョン 11.x 以降 へアップグレードするといったことです。
今回のアップグレードはこちらに該当していないため、更新しません。
2-7. 特定のエクステンションの削除
メジャーバージョンをスキップしてアップグレードする場合、特定のエクステンションを削除する必要があります。
2-6. と同様に今回のアップグレードでは該当していないため、削除しません。
2-8. unknown データ型の削除
PostgreSQL 10.x 以降 では、unknown データ型のサポートが終了しています。
今回は PostgreSQL 13.12 以降 を対象としたアップグレードのため、削除は不要となります。
2-9. 開発環境のデータベースのアップグレード
本番環境のデータベースをアップグレードする前に、開発環境などのデータベースを利用してリハーサルを行います。
対象のデータベースを選択して、変更タブから設定に移行し、「DBエンジンバージョン」を「14.10」にします。
その後、「続行」を選択することでアップグレードが実行されます。
但し変更が適用されるまでには時間を要するため、必ず開始から終了までの時間を計測しておきましょう。
※データベースの変更には、データベースを開始しておく必要があります。
2-10. 本番環境のデータベースのアップグレード
開発環境でのリハーサルが完了したら、本番環境のデータベースをアップグレードします。
リハーサルでの作業内容や終了時間を参考に、実施を進めてください。
2-11. pg_statistic テーブルの更新
本番環境でのアップグレードが問題なく完了したら、最後にデータベースに対して ANALYZE
を実行して pg_statistic テーブルを更新します。
こちらはアップグレード後に、PostgreSQL のすべてのテーブルに対して行う必要があります。
以下のSQL文を実行してください。
ANALYZE VERBOSE;
以上で一通りの手順は完了となります。