Amazon AuroraがPostgreSQL 15に対応しました

2023.04.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

2022年10月にGAになったPostgreSQL 15(15.2)をAmazon Auroraでも利用できるようになりました。

Amazon Aurora now supports PostgreSQL 15 @ 2023/04/07

など様々な機能が追加されています。

詳細は公式のリリースノートやHPE篠田さんの虎の巻をご確認ください。

OSS PostgreSQL と Aurora PostgreSQLの違い

  • PostgreSQL 15から圧縮レベルだけでなく圧縮アルゴリズム(Gzip/LZ4/Zstandard)も指定できるようになりましたが、Auroraは独自の分散ストレージシステムのため、対応していません。
  • pg_backup_start()/pg_backup_stop()を使ったオンラインバックアップには対応していません。
  • リカバリー時のWALのプリフェッチ(recovery_prefetch)には対応していません。

詳細は、Aurora PostgreSQL 15.2のリリースノートをご確認ください。

https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/AuroraPostgreSQL.Updates.html#AuroraPostgreSQL.Updates.20180305.1520

 pg_walinspect は RDS では対応し Aurora では未対応

PostgreSQL 15からは、WALをインスペクトする pg_walinspect が追加されました。

PostgreSQL: Documentation: 15: F.37. pg_walinspect

従来の pg_waldump はファイルシステムへのアクセスが必要なのに対して、 pg_walinspect は SQL インターフェースのため、クラウドとの相性が良いです。

While working on one of the internal features, we found that it is a bit difficult to run pg_waldump for a normal user to know WAL info and stats of a running postgres database instance in the cloud.

PostgreSQL: pg_walinspect - a new extension to get raw WAL data and WAL stats

残念ながら、Aurora PostgreSQL 15が対応しているエクステンションのリストには含まれていません。 RDS for PostgreSQL 15が対応しているのとは対照的です。

Aurora PostgreSQL でもエクステンションを有効化することなら可能です。

postgres=> create extension pg_walinspect;
CREATE EXTENSION

postgres=> \dx
                                    List of installed extensions
     Name      | Version |   Schema   |                         Description
---------------+---------+------------+-------------------------------------------------------------
 pg_walinspect | 1.0     | public     | functions to inspect contents of PostgreSQL Write-Ahead Log
 plpgsql       | 1.0     | pg_catalog | PL/pgSQL procedural language
(2 rows)

postgres=> SELECT pg_current_wal_lsn();
ERROR:  wal_level must be set to 'logical'
HINT:  WAL control functions cannot be executed when wal_level < logical.

postgres=> show wal_level;
 wal_level
-----------
 replica

wal_levelWALの情報量を決定するパラメーターです。

minimal < replica < logical という上下関係があり、 Aurora PostgreSQL 10 以降のデフォルトは replica です

Aurora PostgreSQL では WAL は

  • クラッシュリカバリ
  • ロジカルレプリケーション
  • リーダーインスタンスのページキャッシュの更新

などに利用されます。

HINT にあるように、wal_levellogical に変更することで、 pg_walinspect を有効化することは可能です。

そのためには、クラスターパラメーターグループの rds.logical_replication をデフォルトの 0 から 1に変更して、DBインスタンスを再起動します。

postgres=> show wal_level;
 wal_level
-----------
 logical

postgres=> create table public.t1(id int);
CREATE TABLE
postgres=> select pg_current_wal_lsn();
 pg_current_wal_lsn
--------------------
 0/408DFA8
(1 row)

postgres=> insert into public.t1 values(1);
INSERT 0 1
postgres=> select pg_current_wal_lsn();
 pg_current_wal_lsn
--------------------
 0/408F1C0
(1 row)

ここまでは問題なさそうです。

pg_current_wal_lsn 以外の API も試してみると、エラーが発生します。

postgres=> select * from pg_get_wal_records_info('0/408DFA8', '0/408F1C0');
ERROR:  permission denied for function pg_get_wal_records_info

postgres=> select * from pg_get_wal_stats('0/408DFA8', '0/408F1C0', true);
ERROR:  permission denied for function pg_get_wal_stats
postgres=>

ユーザーが利用可能な 最も権限の強いロールである rds_superuser ロールに pg_walinspect の実行権限がないためです。

postgres=> \du postgres
                        List of roles
 Role name |          Attributes           |    Member of
-----------+-------------------------------+-----------------
 postgres  | Create role, Create DB       +| {rds_superuser}
           | Password valid until infinity |

postgres=> select has_function_privilege('postgres', 'pg_current_wal_lsn()', 'execute');
 has_function_privilege
------------------------
 t
(1 row)


postgres=> select has_function_privilege('postgres', 'pg_get_wal_record_info(pg_lsn)', 'execute');
 has_function_privilege
------------------------
 f
(1 row)

Babelfish が 3.1 にバージョンアップ

Amazon Aurora固有の機能改善として、Babelfishが3.1にバージョンアップしました。

  • Kerberos/AWS Directory Service for Microsoft Managed Active Directory認証
  • Linked Servers

などに対応しています。

https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/AuroraBabelfish.Updates.html#AuroraBabelfish.Updates.31X

Aurora PostgreSQL 15へのメジャーアップグレード

Aurora PostgreSQL 15へは、12系以上からメジャーアップグレード可能です。

$ aws rds describe-db-engine-versions \
  --engine aurora-postgresql \
  --engine-version 12.14 \
  --query 'DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}' \
  --output text
13.10
14.7
15.2

12/13系 Aurora PostgreSQLの場合、15系にメジャーアップグレードする前に、それぞれのメジャーバージョンの最新版にマイナーアップデートしましょう。