RDSのメジャーバージョンアップをしてみる

RDSのメジャーバージョンアップをしてみる
この記事をシェアする

はじめに

こんにちは、スカイアーチHRソリューションズのharaです。

最近RDSのメジャーバージョンアップをする機会があったので、復習がてら手順をまとめました。

基本的に以下のAWS公式ドキュメントを参照しながら作業しました。

事前準備

アップグレード可能なバージョンの確認

まずは対象のRDSでアップグレード可能なバージョンを確認します。

今回テスト用にPostgresql13.11で作成したRDS1台をPostgresql15.3に上げたいと思います。

Postgresql13.11からアップグレードで利用可能なバージョンの中に15.3があるため、一度のアップグレードで
対応が可能です。

※アップグレードしたいバージョンがターゲットに存在しない場合は、段階的にバージョンを
 上げていきます。

インスタンスクラスの確認

以下URLにて、現行RDSのインスタンスクラスがアップグレード対象バージョンで利用可能か確認します。

今回は検証用のためdb.t3.microで作成しています。

確認すると、すべてのPostgreSQLバージョンで利用可能なインタンスクラスのため、特に変更等しなくて
良さそうです。

パラメータグループの準備

アップグレード対象バージョン用のパラメータグループを作成します。

AWSマネジメントコンソールのRDS > パラメータグループより、[パラメータグループの作成] を押下します。

[パラメータグループの作成] 画面にて、postgres15用のパラメータグループ名と説明を入力し、
[作成] を押下します。

作成後、カスタムパラメータグループに作成したグループが存在することを確認します。

保留中メンテナンスの確認

保留中のメンテナンスが存在しているままアップグレードを行うと、アップグレードが長時間化する
可能性があります。

アップグレード前にRDSのメンテナンスとバックアップタブより、保留中のメンテナンスが
存在しないことを確認します。

トランザクションの確認

現在開いている準備済みトランザクションがある場合、アップグレードが失敗する可能性があります。

RDSに接続してトランザクション状態を確認していきます。

本環境ではEC2へSystemsManagerで接続後、EC2にpsqlクライアント (postgresql15) をインストールして
RDSへ接続しました。

※psqlで接続しているserverのバージョンは13.11となっています。

[ec2-user@ip-10-0-0-XXX work]$ psql -h hara-rds-test.*********.ap-northeast-1.rds.amazonaws.com -p 5432 -U postgres
Password for user postgres:
psql (15.0, server 13.11)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, compression: off)
Type "help" for help.

postgres=>

以下のようにcountが0であればコミットまたはロールバックの必要はありません。

postgres=> SELECT count(*) FROM pg_catalog.pg_prepared_xacts;
 count
-------
     0
(1 row)

postgres=>

Reg* データ型 の未使用確認

サポートされていないregclass、regrole、および regtypeを除くreg*データ型が使用されていないか確認します。

上記のreg*型はアップグレード不可となります。こちらもcountが0となっていれば問題ありません。

postgres=> 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');
 count
-------
     0
(1 row)

postgres=>

論理レプリケーションスロットの処理

論理レプリケーションスロットの利用有無を確認します。

こちらは出力結果に何も表示されなければ問題ありません。

postgres=> SELECT * FROM pg_replication_slots;
 slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn | wal_status | safe_wal_size
-----------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------+------------+---------------
(0 rows)

postgres=>

論理レプリケーションスロットが存在する場合はアップグレードは実行できません。

削除する場合は、削除しても影響がないか確認してから以下のコマンドを実行します。

SELECT pg_drop_replication_slot(slot_name);

拡張機能の確認・アップデート

メジャーバージョンをスキップする場合、インストールされている拡張機能はメジャーバージョンアップ時に
同時にアップデートされません。

そのため、事前に対応するバージョンへアップデートする必要があります。

インストール済みの拡張機能は以下のコマンドで確認できます。

postgres=> SELECT * FROM pg_extension;
  oid  | extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition
-------+---------+----------+--------------+----------------+------------+-----------+--------------
 14346 | plpgsql |       10 |           11 | f              | 1.0        |           |
(1 row)

postgres=>

extnameに表示された拡張機能のextversionがDBエンジンバージョンと対応しているか確認します。

今回表示されたplpgsqlはPostgres13.11時点ではバージョン1.0を利用しており、

アップグレード対象バージョンの15.3でもバージョン1.0がサポートされていました。

こちらも特に対応する必要はなさそうです。

拡張機能をバージョンアップする場合は、以下のコマンドを実行します。

ALTER EXTENSION PostgreSQL-extension UPDATE TO 'new-version';

アップグレード前後の比較情報確認

今回はアップグレード前後の整合性確認用途で、現時点のテーブル情報を取得しておきます。

postgres=> select schemaname, tablename, tableowner from pg_tables;
     schemaname     |        tablename        | tableowner
--------------------+-------------------------+------------
 pg_catalog         | pg_statistic            | rdsadmin
 pg_catalog         | pg_type                 | rdsadmin
 pg_catalog         | pg_foreign_table        | rdsadmin
 pg_catalog         | pg_authid               | rdsadmin
 pg_catalog         | pg_statistic_ext_data   | rdsadmin
 pg_catalog         | pg_class                | rdsadmin
 pg_catalog         | pg_attrdef              | rdsadmin
 pg_catalog         | pg_constraint           | rdsadmin
 pg_catalog         | pg_inherits             | rdsadmin
 pg_catalog         | pg_index                | rdsadmin
 pg_catalog         | pg_operator             | rdsadmin
 pg_catalog         | pg_opfamily             | rdsadmin
 pg_catalog         | pg_opclass              | rdsadmin
 pg_catalog         | pg_am                   | rdsadmin
 information_schema | sql_implementation_info | rdsadmin
 pg_catalog         | pg_amop                 | rdsadmin
 pg_catalog         | pg_amproc               | rdsadmin
 pg_catalog         | pg_language             | rdsadmin
 pg_catalog         | pg_largeobject_metadata | rdsadmin
 pg_catalog         | pg_aggregate            | rdsadmin
 pg_catalog         | pg_statistic_ext        | rdsadmin
 pg_catalog         | pg_rewrite              | rdsadmin
 pg_catalog         | pg_trigger              | rdsadmin
 pg_catalog         | pg_event_trigger        | rdsadmin
 pg_catalog         | pg_description          | rdsadmin
 pg_catalog         | pg_cast                 | rdsadmin
 pg_catalog         | pg_enum                 | rdsadmin
 pg_catalog         | pg_namespace            | rdsadmin
 pg_catalog         | pg_conversion           | rdsadmin
 pg_catalog         | pg_depend               | rdsadmin
 pg_catalog         | pg_database             | rdsadmin
 pg_catalog         | pg_db_role_setting      | rdsadmin
 pg_catalog         | pg_tablespace           | rdsadmin
 pg_catalog         | pg_auth_members         | rdsadmin
 pg_catalog         | pg_shdepend             | rdsadmin
 pg_catalog         | pg_shdescription        | rdsadmin
 pg_catalog         | pg_ts_config            | rdsadmin
 pg_catalog         | pg_ts_config_map        | rdsadmin
 pg_catalog         | pg_ts_dict              | rdsadmin
 pg_catalog         | pg_ts_parser            | rdsadmin
 pg_catalog         | pg_ts_template          | rdsadmin
 pg_catalog         | pg_extension            | rdsadmin
 pg_catalog         | pg_foreign_data_wrapper | rdsadmin
 pg_catalog         | pg_foreign_server       | rdsadmin
 pg_catalog         | pg_policy               | rdsadmin
 pg_catalog         | pg_replication_origin   | rdsadmin
 pg_catalog         | pg_default_acl          | rdsadmin
 pg_catalog         | pg_init_privs           | rdsadmin
 pg_catalog         | pg_seclabel             | rdsadmin
 pg_catalog         | pg_shseclabel           | rdsadmin
 pg_catalog         | pg_collation            | rdsadmin
 pg_catalog         | pg_partitioned_table    | rdsadmin
 pg_catalog         | pg_range                | rdsadmin
 pg_catalog         | pg_transform            | rdsadmin
 pg_catalog         | pg_sequence             | rdsadmin
 pg_catalog         | pg_publication          | rdsadmin
 pg_catalog         | pg_publication_rel      | rdsadmin
 pg_catalog         | pg_subscription_rel     | rdsadmin
 information_schema | sql_parts               | rdsadmin
 information_schema | sql_sizing              | rdsadmin
 information_schema | sql_features            | rdsadmin
 pg_catalog         | pg_user_mapping         | rdsadmin
 pg_catalog         | pg_subscription         | rdsadmin
 pg_catalog         | pg_attribute            | rdsadmin
 pg_catalog         | pg_proc                 | rdsadmin
 pg_catalog         | pg_largeobject          | rdsadmin
 myschema           | haratesttable           | postgres
(67 rows)

postgres=>

また、事前にmyschema内にharatesttableというテーブルの作成と簡単なデータを投入しておきました。

postgres=> select * from myschema.haratesttable;
 id | name
----+------
  1 | aaaa
  1 | bbbb
  1 | cccc
(3 rows)

postgres=>

以下のコマンドでpostgresqlの接続を終了します。

postgres=> \q
[ec2-user@ip-10-0-0-XXX work]$

スナップショット取得

ここまで問題ないことを確認してスナップショットを取得します。

対象のAWSマネジメントコンソールより、対象のRDSを選択して [アクション] > [スナップショットの取得] を
押下します。

スナップショットを取得するDB インスタンス名の確認と、スナップショット名を入力し、
[スナップショットの取得] を押下します。

スナップショット取得後、スナップショットの状態が [利用可能] となることを確認します。

パラメータグループのデフォルト化 (必要に応じて実施)

カスタムパラメータグループを利用していて、バージョン間で互換性がないパラメータを変更している
場合は、メジャーバージョンアップ前後で一度デフォルトパラメータグループへ変更する必要があります。

ここでパラメータグループを変更した場合は、アップグレード時に指定するパラメータグループも
デフォルトとし、アップグレード完了後にカスタムパラメータグループを再指定するようにしましょう。

アップグレード作業

アップグレード

実際にアップグレードしていきます。

AWSマネジメントコンソールより対象のRDSを選択し、 [変更] を押下します。

[DB インスタンスを変更] 画面にて、DB エンジンバージョン欄から [15.3] を選択します。

画面下部へ進み、 [データベースの選択肢] DB パラメータグループ欄から作成した

[postgres15-parametergroup] を選択し、 [続行] を押下します。

変更のサマリーで対象を変更対象を確認し、変更のスケジュールにて [すぐに適用] を選択して
[DB インスタンスを変更] を押下します。

アップグレードが始まります。アップグレード中はRDSのステータスが [🕘のアップグレード] となります。

裏側ではpg_upgradeユーティリティが使用されているようです。

アップグレードが正常に終了すると、ステータスが [利用可能] となります。

設定タブを見ると、エンジンバージョンが無事15.3に変わったことが確認できます。

アップグレード後の確認

アップグレード中のログはログとイベントタブのログ欄から確認可能です。

以下のように、internalログとserverログの2種類のログが出力されます。

  • pg_upgrade_internal.log:RDSアップグレード (pg_upgrade) ログ
  • pg_upgrade_server.log:RDSの停止起動等が出力されるログ

ERRORやFATALが出力されていないこと、internal.log下部にUpgrade Completeと出力されていること等を
確認します。

続いて、再度EC2からRDSへ接続します。

※psqlで接続しているserverのバージョンが15.3に変わりました。

[ec2-user@ip-10-0-0-XXX work]$ psql -h hara-rds-test.********.ap-northeast-1.rds.amazonaws.com -p 5432 -U postgres
Password for user postgres:
psql (15.0, server 15.3)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, compression: off)
Type "help" for help.

postgres=>

アップグレード後のテーブル情報を取得します。

postgres=> select schemaname, tablename, tableowner from pg_tables;
     schemaname     |        tablename         | tableowner
--------------------+--------------------------+------------
 pg_catalog         | pg_statistic             | rdsadmin
 pg_catalog         | pg_type                  | rdsadmin
 pg_catalog         | pg_largeobject           | rdsadmin
 myschema           | haratesttable            | postgres
 pg_catalog         | pg_foreign_table         | rdsadmin
 pg_catalog         | pg_authid                | rdsadmin
 pg_catalog         | pg_statistic_ext_data    | rdsadmin
 pg_catalog         | pg_largeobject_metadata  | rdsadmin
 pg_catalog         | pg_aggregate             | rdsadmin
 pg_catalog         | pg_statistic_ext         | rdsadmin
 pg_catalog         | pg_rewrite               | rdsadmin
 pg_catalog         | pg_user_mapping          | rdsadmin
 pg_catalog         | pg_subscription          | rdsadmin
 pg_catalog         | pg_attribute             | rdsadmin
 pg_catalog         | pg_proc                  | rdsadmin
 pg_catalog         | pg_class                 | rdsadmin
 pg_catalog         | pg_attrdef               | rdsadmin
 pg_catalog         | pg_constraint            | rdsadmin
 pg_catalog         | pg_inherits              | rdsadmin
 pg_catalog         | pg_index                 | rdsadmin
 pg_catalog         | pg_operator              | rdsadmin
 pg_catalog         | pg_opfamily              | rdsadmin
 pg_catalog         | pg_opclass               | rdsadmin
 pg_catalog         | pg_am                    | rdsadmin
 pg_catalog         | pg_amop                  | rdsadmin
 pg_catalog         | pg_amproc                | rdsadmin
 pg_catalog         | pg_language              | rdsadmin
 pg_catalog         | pg_trigger               | rdsadmin
 pg_catalog         | pg_event_trigger         | rdsadmin
 pg_catalog         | pg_description           | rdsadmin
 pg_catalog         | pg_cast                  | rdsadmin
 pg_catalog         | pg_enum                  | rdsadmin
 pg_catalog         | pg_namespace             | rdsadmin
 pg_catalog         | pg_conversion            | rdsadmin
 pg_catalog         | pg_depend                | rdsadmin
 pg_catalog         | pg_database              | rdsadmin
 pg_catalog         | pg_db_role_setting       | rdsadmin
 pg_catalog         | pg_tablespace            | rdsadmin
 pg_catalog         | pg_auth_members          | rdsadmin
 pg_catalog         | pg_shdepend              | rdsadmin
 pg_catalog         | pg_shdescription         | rdsadmin
 pg_catalog         | pg_ts_config             | rdsadmin
 pg_catalog         | pg_ts_config_map         | rdsadmin
 pg_catalog         | pg_ts_dict               | rdsadmin
 pg_catalog         | pg_ts_parser             | rdsadmin
 pg_catalog         | pg_ts_template           | rdsadmin
 pg_catalog         | pg_extension             | rdsadmin
 pg_catalog         | pg_foreign_data_wrapper  | rdsadmin
 pg_catalog         | pg_foreign_server        | rdsadmin
 pg_catalog         | pg_policy                | rdsadmin
 pg_catalog         | pg_replication_origin    | rdsadmin
 pg_catalog         | pg_default_acl           | rdsadmin
 pg_catalog         | pg_init_privs            | rdsadmin
 pg_catalog         | pg_seclabel              | rdsadmin
 pg_catalog         | pg_shseclabel            | rdsadmin
 pg_catalog         | pg_collation             | rdsadmin
 pg_catalog         | pg_parameter_acl         | rdsadmin
 pg_catalog         | pg_partitioned_table     | rdsadmin
 pg_catalog         | pg_range                 | rdsadmin
 pg_catalog         | pg_transform             | rdsadmin
 pg_catalog         | pg_sequence              | rdsadmin
 pg_catalog         | pg_publication           | rdsadmin
 pg_catalog         | pg_publication_namespace | rdsadmin
 pg_catalog         | pg_publication_rel       | rdsadmin
 pg_catalog         | pg_subscription_rel      | rdsadmin
 information_schema | sql_features             | rdsadmin
 information_schema | sql_implementation_info  | rdsadmin
 information_schema | sql_parts                | rdsadmin
 information_schema | sql_sizing               | rdsadmin
(69 rows)

アップグレード前から2つのテーブルが増えました。

どちらもPostgreSQL15から追加されたテーブルのようです。

  • pg_parameter_acl
  • pg_publication_namespace

また、事前にテスト用に作成したharatesttableのデータにも特に変わりありませんでした。

postgres=> select * from myschema.haratesttable;
 id | name
----+------
  1 | aaaa
  1 | bbbb
  1 | cccc
(3 rows)

postgres=>

アナライズ実行

最後に、パフォーマンス統計情報を再生成します。

postgres=> ANALYZE VERBOSE;
INFO:  analyzing "pg_catalog.pg_type"
INFO:  "pg_type": scanned 15 of 15 pages, containing 613 live rows and 2 dead rows; 613 rows in sample, 613 estimated total rows
INFO:  analyzing "pg_catalog.pg_largeobject"
INFO:  "pg_largeobject": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "myschema.haratesttable"
INFO:  "haratesttable": scanned 1 of 1 pages, containing 3 live rows and 0 dead rows; 3 rows in sample, 3 estimated total rows
INFO:  analyzing "pg_catalog.pg_foreign_table"
INFO:  "pg_foreign_table": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_authid"
INFO:  "pg_authid": scanned 1 of 1 pages, containing 21 live rows and 15 dead rows; 21 rows in sample, 21 estimated total rows
INFO:  analyzing "pg_catalog.pg_statistic_ext_data"
INFO:  "pg_statistic_ext_data": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_largeobject_metadata"
INFO:  "pg_largeobject_metadata": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_aggregate"
INFO:  "pg_aggregate": scanned 2 of 2 pages, containing 148 live rows and 0 dead rows; 148 rows in sample, 148 estimated total rows
INFO:  analyzing "pg_catalog.pg_statistic_ext"
INFO:  "pg_statistic_ext": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_rewrite"
INFO:  "pg_rewrite": scanned 14 of 14 pages, containing 142 live rows and 0 dead rows; 142 rows in sample, 142 estimated total rows
INFO:  analyzing "pg_catalog.pg_user_mapping"
INFO:  "pg_user_mapping": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_subscription"
INFO:  "pg_subscription": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_attribute"
INFO:  "pg_attribute": scanned 56 of 56 pages, containing 3062 live rows and 0 dead rows; 3062 rows in sample, 3062 estimated total rows
INFO:  analyzing "pg_catalog.pg_proc"
INFO:  "pg_proc": scanned 96 of 96 pages, containing 3244 live rows and 0 dead rows; 3244 rows in sample, 3244 estimated total rows
INFO:  analyzing "pg_catalog.pg_class"
INFO:  "pg_class": scanned 16 of 16 pages, containing 411 live rows and 162 dead rows; 411 rows in sample, 411 estimated total rows
INFO:  analyzing "pg_catalog.pg_attrdef"
INFO:  "pg_attrdef": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_constraint"
INFO:  "pg_constraint": scanned 3 of 3 pages, containing 111 live rows and 0 dead rows; 111 rows in sample, 111 estimated total rows
INFO:  analyzing "pg_catalog.pg_inherits"
INFO:  "pg_inherits": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_index"
INFO:  "pg_index": scanned 4 of 4 pages, containing 162 live rows and 0 dead rows; 162 rows in sample, 162 estimated total rows
INFO:  analyzing "pg_catalog.pg_operator"
INFO:  "pg_operator": scanned 14 of 14 pages, containing 799 live rows and 0 dead rows; 799 rows in sample, 799 estimated total rows
INFO:  analyzing "pg_catalog.pg_opfamily"
INFO:  "pg_opfamily": scanned 2 of 2 pages, containing 146 live rows and 0 dead rows; 146 rows in sample, 146 estimated total rows
INFO:  analyzing "pg_catalog.pg_opclass"
INFO:  "pg_opclass": scanned 3 of 3 pages, containing 177 live rows and 0 dead rows; 177 rows in sample, 177 estimated total rows
INFO:  analyzing "pg_catalog.pg_am"
INFO:  "pg_am": scanned 1 of 1 pages, containing 7 live rows and 0 dead rows; 7 rows in sample, 7 estimated total rows
INFO:  analyzing "pg_catalog.pg_amop"
INFO:  "pg_amop": scanned 7 of 7 pages, containing 945 live rows and 0 dead rows; 945 rows in sample, 945 estimated total rows
INFO:  analyzing "pg_catalog.pg_amproc"
INFO:  "pg_amproc": scanned 5 of 5 pages, containing 697 live rows and 0 dead rows; 697 rows in sample, 697 estimated total rows
INFO:  analyzing "pg_catalog.pg_language"
INFO:  "pg_language": scanned 1 of 1 pages, containing 4 live rows and 0 dead rows; 4 rows in sample, 4 estimated total rows
INFO:  analyzing "pg_catalog.pg_trigger"
INFO:  "pg_trigger": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_event_trigger"
INFO:  "pg_event_trigger": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_description"
INFO:  "pg_description": scanned 44 of 44 pages, containing 5099 live rows and 1 dead rows; 5099 rows in sample, 5099 estimated total rows
INFO:  analyzing "pg_catalog.pg_cast"
INFO:  "pg_cast": scanned 2 of 2 pages, containing 229 live rows and 0 dead rows; 229 rows in sample, 229 estimated total rows
INFO:  analyzing "pg_catalog.pg_enum"
INFO:  "pg_enum": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_namespace"
INFO:  "pg_namespace": scanned 1 of 1 pages, containing 5 live rows and 5 dead rows; 5 rows in sample, 5 estimated total rows
INFO:  analyzing "pg_catalog.pg_conversion"
INFO:  "pg_conversion": scanned 2 of 2 pages, containing 128 live rows and 0 dead rows; 128 rows in sample, 128 estimated total rows
INFO:  analyzing "pg_catalog.pg_depend"
INFO:  "pg_depend": scanned 14 of 14 pages, containing 1834 live rows and 0 dead rows; 1834 rows in sample, 1834 estimated total rows
INFO:  analyzing "pg_catalog.pg_database"
INFO:  "pg_database": scanned 1 of 1 pages, containing 4 live rows and 14 dead rows; 4 rows in sample, 4 estimated total rows
INFO:  analyzing "pg_catalog.pg_db_role_setting"
INFO:  "pg_db_role_setting": scanned 1 of 1 pages, containing 5 live rows and 28 dead rows; 5 rows in sample, 5 estimated total rows
INFO:  analyzing "pg_catalog.pg_tablespace"
INFO:  "pg_tablespace": scanned 1 of 1 pages, containing 3 live rows and 4 dead rows; 3 rows in sample, 3 estimated total rows
INFO:  analyzing "pg_catalog.pg_auth_members"
INFO:  "pg_auth_members": scanned 1 of 1 pages, containing 13 live rows and 8 dead rows; 13 rows in sample, 13 estimated total rows
INFO:  analyzing "pg_catalog.pg_shdepend"
INFO:  "pg_shdepend": scanned 1 of 1 pages, containing 8 live rows and 1 dead rows; 8 rows in sample, 8 estimated total rows
INFO:  analyzing "pg_catalog.pg_shdescription"
INFO:  "pg_shdescription": scanned 1 of 1 pages, containing 3 live rows and 2 dead rows; 3 rows in sample, 3 estimated total rows
INFO:  analyzing "pg_catalog.pg_ts_config"
INFO:  "pg_ts_config": scanned 1 of 1 pages, containing 29 live rows and 0 dead rows; 29 rows in sample, 29 estimated total rows
INFO:  analyzing "pg_catalog.pg_ts_config_map"
INFO:  "pg_ts_config_map": scanned 3 of 3 pages, containing 551 live rows and 0 dead rows; 551 rows in sample, 551 estimated total rows
INFO:  analyzing "pg_catalog.pg_ts_dict"
INFO:  "pg_ts_dict": scanned 1 of 1 pages, containing 29 live rows and 0 dead rows; 29 rows in sample, 29 estimated total rows
INFO:  analyzing "pg_catalog.pg_ts_parser"
INFO:  "pg_ts_parser": scanned 1 of 1 pages, containing 1 live rows and 0 dead rows; 1 rows in sample, 1 estimated total rows
INFO:  analyzing "pg_catalog.pg_ts_template"
INFO:  "pg_ts_template": scanned 1 of 1 pages, containing 5 live rows and 0 dead rows; 5 rows in sample, 5 estimated total rows
INFO:  analyzing "pg_catalog.pg_extension"
INFO:  "pg_extension": scanned 1 of 1 pages, containing 1 live rows and 0 dead rows; 1 rows in sample, 1 estimated total rows
INFO:  analyzing "pg_catalog.pg_foreign_data_wrapper"
INFO:  "pg_foreign_data_wrapper": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_foreign_server"
INFO:  "pg_foreign_server": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_policy"
INFO:  "pg_policy": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_replication_origin"
INFO:  "pg_replication_origin": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_default_acl"
INFO:  "pg_default_acl": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_init_privs"
INFO:  "pg_init_privs": scanned 3 of 3 pages, containing 212 live rows and 1 dead rows; 212 rows in sample, 212 estimated total rows
INFO:  analyzing "pg_catalog.pg_seclabel"
INFO:  "pg_seclabel": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_shseclabel"
INFO:  "pg_shseclabel": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_collation"
INFO:  "pg_collation": scanned 33 of 33 pages, containing 1750 live rows and 0 dead rows; 1750 rows in sample, 1750 estimated total rows
INFO:  analyzing "pg_catalog.pg_parameter_acl"
INFO:  "pg_parameter_acl": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_partitioned_table"
INFO:  "pg_partitioned_table": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_range"
INFO:  "pg_range": scanned 1 of 1 pages, containing 6 live rows and 0 dead rows; 6 rows in sample, 6 estimated total rows
INFO:  analyzing "pg_catalog.pg_transform"
INFO:  "pg_transform": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_sequence"
INFO:  "pg_sequence": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_publication"
INFO:  "pg_publication": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_publication_namespace"
INFO:  "pg_publication_namespace": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_publication_rel"
INFO:  "pg_publication_rel": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "pg_catalog.pg_subscription_rel"
INFO:  "pg_subscription_rel": scanned 0 of 0 pages, containing 0 live rows and 0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  analyzing "information_schema.sql_features"
INFO:  "sql_features": scanned 8 of 8 pages, containing 714 live rows and 0 dead rows; 714 rows in sample, 714 estimated total rows
INFO:  analyzing "information_schema.sql_implementation_info"
INFO:  "sql_implementation_info": scanned 1 of 1 pages, containing 12 live rows and 0 dead rows; 12 rows in sample, 12 estimated total rows
INFO:  analyzing "information_schema.sql_parts"
INFO:  "sql_parts": scanned 1 of 1 pages, containing 10 live rows and 0 dead rows; 10 rows in sample, 10 estimated total rows
INFO:  analyzing "information_schema.sql_sizing"
INFO:  "sql_sizing": scanned 1 of 1 pages, containing 23 live rows and 0 dead rows; 23 rows in sample, 23 estimated total rows
ANALYZE
postgres=>

RDS観点でのメジャーバージョンアップ作業はこれで終了です。お疲れさまでした!

おわりに

RDS (PostgreSQL)のバージョンアップは事前準備の方が多く、実際のバージョンアップは簡単にできます。

本記事が何かの参考になりましたら幸いです。

この記事をシェアする
著者:hara
AWS2年目のエンジニア。前職ではAzure、M365サポート等をやっていました。