こんにちは、SCSK の松山です。
Amazon Aurora DSQL (以下 DSQL と略す) について、従来の PostgreSQL との差異に焦点をあてて調べてみたシリーズ、前回(第一弾)は、DSQL の簡単な要約と構築についてお伝えしました。
Amazon RDS や Amazon Aurora、オンプレの PostgreSQL と比較して、非常に簡単に構築できることがわかりました。
第二弾として、本件では従来の PostgreSQL と比較した場合の機能制限に焦点をあててまとめていきます。
※本件は 2025/3 時点の Amazon Aurora DSQL User Guide – PostgreSQL compatibility を参考に記載しました。
DSQL は 2025/3 現在プレビュー版のため、今後機能の追加によって制限が変更されることが想定されます。
実際に DSQL を使用する場合は、その時点の最新マニュアルを合わせてご確認ください。
DSQL の制限を知る重要性
DSQL は PostgreSQL と一部機能の互換性があると発表されていますが、完全な互換性を保証するものではありません。そのため、従来の PostgreSQL と同じ構成ができるつもりで DSQL を使い始めた場合、予期せぬ問題に直面する恐れがあります。
DSQL を有効活用するためにも、まずはできること、できないことを正確に把握しておくことが重要です。
DSQL の制限
以下、いくつかの項目に分けて制限事項をまとめていきます。
オブジェクトの制限
以下のオブジェクトはサポートされていません。
-
- Database (DSQL 作成時に作られる Database 以外は追加できない)
- View
- Temporary Table
- Trigger
- Type
- Tablespace
- Sequence
- Materialized View
- Procedure
- SQL 以外を使用する Function
- Foreign key (参照整合性制約)
- Exclusion constraint (排他制約)
Function に関しては、SQL のみを使用した単純な構成の物は作成することが可能です。
(後述しますが、DSQL では plpgsql をサポートしていません)
Procedure や Function、Trigger などのソースコード系オブジェクトが制限されている点から、Database 内で複雑な処理を行う使用方法は想定されていないと考えられます。
また RDBMS として利用頻度の高い参照整合性制約がサポートされていない点は抑えておきたいポイントです。
オペレーションの制限
以下のオペレーションはサポートされていません。
-
- ALTER SYSTEM
- TRUNCATE
- VACUUM
- SAVEPOINT
従来の PostgreSQL として特徴的な VACUUM が手動実行できない点は抑えておきたいポイントです。
SQL の制限
DSQL では SQL の一部構文がサポートされていません。
全てを網羅的には公開されていませんが、マニュアルより以下をサポートしていない点が確認できます。
-
- CREATE
- 「オブジェクトの制限」に記載した各種オブジェクト
- 拡張機能の追加 (EXTENTION)
- CREATE INDEX
- ソート順 (ASC、DESC)
- CREATE TABLE
- AS SELECT
- 照合順(COLLATE)
- テーブルの継承(INHERITS)
- パーティション(PARTITION)
- CREATE
データ型の制限
データ型については大きく分けて3つのポイントがあります。
-
- サポートされるデータ型の制限
DSQL でサポートされているデータ型が Amazon Aurora DSQL User Guide Supported data types in Aurora DSQL に記載されています。記載されていないデータ型については、動作するかを個別に確認する必要があります。
- データ型のサイズ制限
サポートされているデータ型に対しても、DSQL 独自のサイズ制限が設けられているケースがあります。そのため、合わせて確認が必要です。DSQL のデータ型 サイズ制限
Name Implicit Limit character [ (n) ] 4096 bytes bpchar [ (n) ] 4096 bytes character varying [ (n) ] 65535 bytes text 1MB bytea 1 MB numeric [ (p, s) ] numeric (18,6) - Primary Key および 索引付与の制限
以下のデータ型は Primary Key や 索引を付与することができません。- bytea
- numeric
- timestap with time zone
- interval
- サポートされるデータ型の制限
特に numeric は使用頻度の高いデータ型のため、DSQL への移行を検討している場合には留意が必要です。
拡張機能の制限
従来の PostgreSQL にはさまざまな拡張機能が存在します。
マニュアルでは例として、以下代表的な拡張機能をサポートしていない旨が記載されていました。
-
- PL/pgSQL
- PostGIS
- PGVector
- PGAudit
- Postgres_FDW
- PGCron
- pg_stat_statements
しかし「SQLの制限」に記載した通り、拡張機能を追加するための CREATE EXTENTION がサポートされていません。
そのため、拡張機能は全般的にサポートされていないと考えたほうがいいでしょう。
システム管理表 および 管理ビューの制限
DSQL はメンテナンスを含めてサービスに任せる運用になります。
そのため、多くのシステム管理表 および 管理ビューに情報が出力されません。
どのシステム管理表 および 管理ビューに対応しているかは Amazon Aurora DSQL User Guide Using system tables and commands in Aurora DSQL に記載されています。
DSQL のサービス上、DBA としての作業はあまり発生しないと考えられますが、頭の片隅に入れておくといいかと思います。
トランザクションの制限
トランザクションには以下の制限が設けられています。
-
- 接続は1時間を超えることはできない
- トランザクションに DDL と DML を混在させることはできない
- トランザクションに含められる DDL は最大1つ
- トランザクションは10,000行を超える更新を行うことはできない
(索引が付与されている場合、索引更新行数も制限内に含まれる)
実行時間に制限がある点や、1トランザクションの更新量に制限がある点からも、複雑な処理の実行は想定していないことが伺えます。
なお1トランザクションの更新量については、索引の付与状況によってさらに減少するという記載がありました。
この点はマニュアルの記載からは把握が難しいため、今後のシリーズにて実機検証を踏まえた内容をまとめていきます。
まとめ
DSQL では従来の PostgreSQL と比較して、さまざまな制限があることがわかりました。
制限されている内容から、従来の PostgreSQL のような Database 内で複雑な処理を行うことは想定していないと考えます。
分散SQLデータベース かつ 事実上無制限のスケーラビリティを提供している点から、単純 かつ 短時間で完了するクエリが大量に同時実行されるようなシステム(OLTP系の処理)に適しているのではないでしょうか。
DSQL は 2025/3 現在まだプレビュー中のため、今後機能の追加によって制限が緩和されることにも期待したいと思います。
次回は DSQL と 従来の PostgreSQL で大きな違いとなるトランザクションの同時実行制御の差異を深堀していきます。
ご興味のある方は引き続きご確認いただければ幸いです。