LoginSignup
1
0

【Amazon RDS】PostgreSQL 13.12 を 14.10 へアップグレードする

Posted at

背景

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 を選択して、「パラメータグループ」>「パラメータグループの作成」を開きます。

【RDSバージョンアップ】手順①.png

上記の設定項目は、全て必須となります。

  • パラメータグループファミリー:アップグレード先を指定
  • タイプ:利用するものを選択
  • グループ名:自由に記載
  • 説明:自由に記載

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. バックアップの実行

アップグレードの実行前に、データベースのバックアップを実行します。
対象のデータベースを選択して、アクションタブから「スナップショットの取得」を実行します。

【RDSバージョンアップ】手順⑤.png

※スナップショットの取得には、データベースを開始しておく必要があります。

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」にします。
その後、「続行」を選択することでアップグレードが実行されます。
但し変更が適用されるまでには時間を要するため、必ず開始から終了までの時間を計測しておきましょう。

【RDSバージョンアップ】手順⑨.png

※データベースの変更には、データベースを開始しておく必要があります。

2-10. 本番環境のデータベースのアップグレード

開発環境でのリハーサルが完了したら、本番環境のデータベースをアップグレードします。
リハーサルでの作業内容や終了時間を参考に、実施を進めてください。

2-11. pg_statistic テーブルの更新

本番環境でのアップグレードが問題なく完了したら、最後にデータベースに対して ANALYZE を実行して pg_statistic テーブルを更新します。
こちらはアップグレード後に、PostgreSQL のすべてのテーブルに対して行う必要があります。
以下のSQL文を実行してください。

ANALYZE VERBOSE;

以上で一通りの手順は完了となります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0