2022年10月にGAになったPostgreSQL 15(15.2)をAmazon Auroraでも利用できるようになりました。
Amazon Aurora now supports PostgreSQL 15 @ 2023/04/07
- MERGE コマンド
- ソートのパフォーマンス向上
- ロジカルレプリケーション対象のテーブル列指定、行指定可能
- JSON形式のログ出力
など様々な機能が追加されています。
詳細は公式のリリースノートやHPE篠田さんの虎の巻をご確認ください。
OSS PostgreSQL と Aurora PostgreSQLの違い
- PostgreSQL 15から圧縮レベルだけでなく圧縮アルゴリズム(Gzip/LZ4/Zstandard)も指定できるようになりましたが、Auroraは独自の分散ストレージシステムのため、対応していません。
pg_backup_start()/pg_backup_stop()
を使ったオンラインバックアップには対応していません。- リカバリー時のWALのプリフェッチ(
recovery_prefetch
)には対応していません。
詳細は、Aurora PostgreSQL 15.2のリリースノートをご確認ください。
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_level
はWALの情報量を決定するパラメーターです。
minimal
< replica
< logical
という上下関係があり、 Aurora PostgreSQL 10 以降のデフォルトは replica
です
Aurora PostgreSQL では WAL は
- クラッシュリカバリ
- ロジカルレプリケーション
- リーダーインスタンスのページキャッシュの更新
などに利用されます。
HINT
にあるように、wal_level
を logical
に変更することで、 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
などに対応しています。
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系にメジャーアップグレードする前に、それぞれのメジャーバージョンの最新版にマイナーアップデートしましょう。