0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Aurora DSQL への道:互換性の落とし穴を Insight SQL Testing で乗り越える!

Last updated at Posted at 2025-07-23

はじめに

こんにちは、インサイトテクノロジーの松尾です!

昨年 re:Invent 2024 で発表され、ついに一般提供が開始された Amazon Aurora DSQL。日本の東京と大阪リージョンでも利用可能となり、まさに「待ってました!」という方も多いのではないでしょうか。

Aurora DSQL は、事実上無制限にスケールするサーバーレスな分散 SQL データベースです。3つのアベイラビリティゾーンにまたがる Active/Active の単一クラスタを提供しつつ、マルチリージョン構成が可能で、高いデータ一貫性を備えた読み取りと書き込みをサポートします。単一リージョンで99.99%、マルチリージョンで99.999%の可用性を実現するように設計されており、プロビジョニングやパッチ適用、アップグレードといったインフラ管理の負担から解放され、常に利用可能なアプリケーションの構築を強力にサポートします。PostgreSQLとの互換性も確保されており、使いやすい開発者エクスペリエンスを提供していることから、早速自社のアプリやサービスを移行したい!とお考えの方も多いのではないでしょうか?

しかし、このような新しいデータベースへの移行で多くのエンジニアが頭を悩ませるのが「互換性問題」です。特に、Aurora DSQL は PostgreSQL と互換性がある一方で、通常の PostgreSQL で利用可能な SQL 機能の一部 (多く?) がサポートされていないため、この互換性の確認は極めて重要になります。

なぜSQL互換性確認が必要なのか?

Aurora DSQL には、PostgreSQL との互換性がある一方で、現在サポートされていない機能が明確に存在します。

  • サポートされていないオブジェクト:
    • 単一クラスター上の複数データベース、一時テーブル、トリガー、シーケンス、パーティション、SQL以外の言語で記述された関数など。
  • サポートされていない制約:
    • 外部キー、排他制約など。
  • サポートされていないコマンド:
    • ALTER SYSTEM、TRUNCATE、SAVEPOINT、VACUUM (DSQLはバキューム処理を必要としない) など。
  • サポートされていない拡張機能:
    • PL/pgSQL、PostGIS、PGVector、PGAuditなど。
  • サポートされていない SQL 式/構文:
    • CREATE INDEX ASYNC、COLLATE句、AS SELECT句 (CREATE TABLE時)、CREATE TEMPORARY TABLES、CREATE EXTENSION、CREATE SEQUENCE、CREATE MATERIALIZED VIEW、CREATE TABLESPACE、CREATE TRIGGER、CREATE TYPE、CREATE DATABASEなど。
  • その他の互換性制限:
    • postgresという単一の組み込みデータベースのみ使用可能、UTF-8文字エンコード固定、UTCタイムゾーン固定、トランザクション分離レベルがRepeatable Readで固定、DDLとDMLの混在不可、トランザクションでの変更行数制限 (3,000行まで)、DB接続が1時間でタイムアウト、GRANT [permission] ON DATABASEの非サポートなど。

外部キーなど、基本的なオブジェクトでもサポートされていないものがありますし、PGAuditもサポートされていないため、現時点では監査ログも取得できず、本番利用にあたっては現時点では十分検討が必要だと思います。
また、行けそう!という判断になったとしても、これらのドキュメントに記載された変更点を全て把握し、これまで実行されてきた膨大なアプリケーションSQLが新しいバージョンや Aurora DSQL 環境で問題なく動作するかを、手動で全て洗い出すのは非常に困難で時間のかかる作業です。
※なお、上記の情報はブログ執筆時点での情報となりますので、最新情報はAWS公式ドキュメントを参照ください。

解決策はSQLテスト:Insight SQL Testing の活用

そこで、この互換性調査の解決策として、SQLテストツール「Insight SQL Testing」 をご紹介します。SQLテストとは、「これまで実行されていたSQLが、これまでと同じ結果を返すことを確認するテスト」です。
Insight SQL Testing は、以下の機能でSQLテストを効率的に実施できます。

  • 現行環境からのSQL自動収集: 実際にアプリケーションが発行しているSQLを漏れなく集めます。
  • 収集したSQLのテスト実行: テスト用DBに対してSQLを実行し、実行可否、実行結果(SELECT、更新DML)の比較、実行速度の比較を行います。
  • テスト結果の確認・評価: サマリー画面で全体像を把握でき、さらに生成AIによるエラー説明や修正案の提示も可能です。

image.png

Insight SQL Testingは、Oracle Database、PostgreSQL、MySQLなど多様なDBエンジンに対応しており、異なるDBへの移行や、特にAuroraのメジャーバージョンアップ時のテストなどでの利用実績なども多いです。

実践!:RDS for PostgreSQL から Aurora DSQL への移行を想定してSQLテストを試す

Insight SQL Testing を使って、RDS for PostgreSQL からの移行を想定したSQL互換性移行アセスメントをどのように実施できるか、実際に試してみたいと思います。

以下のステップで行います。

  • RDS for PostgreSQL からの実行SQL収集
  • Aurora DSQL の起動
  • SQLテストの実行

RDS for PostgreSQL からの実行SQL収集

まず RDS for PostgreSQL からの実行SQLの収集を行います。収集は、RDS for PostgreSQL で標準ログの出力を有効にし、それを取り込んでテストケースとします。
評価SQLセットの新規作成で、RDSのインスタンスを指定します。

image.png

新規作成を実行すると、実行したSQLの取り込みを確認できます。
※DBeaver から接続してテスト用のSQLをいくつか実行した例です

image.png

Aurora DSQL の起動

テスト用の環境として Aurora DSQL を起動して必要なスキーマを用意します。

なお、テスト用のテーブルとして、いつもテストで使用している pg-scott (SCOTTスキーマをPostgreSQLで利用可能にしたもの) を利用しようとしたところ、外部キーや、1トランザクション内での複数DDL使用など、そのままでは実行できませんでした。こういった基本的な構文でも注意が必要なことがわかります。

Aurora DSQL クラスタ自体の起動は非常に簡単で、いくつかのオプションを選択するだけで起動できます。

image.png

起動後に必要な接続先などの情報は、Get token から取得します。

image.png

この情報を使用すると、例えば DBeaver などのデータベースクライアントからも接続できます。

Aurora DSQL 起動時にはネットワークやセキュリティグループの指定がありませんでした。VPCに属さないサービスのようですね。

Insight SQL Testing のターゲットDBも同じ情報を使用して作成可能です。

image.png

SQLテストの実行

さて、評価SQLセット(テスト用のSQL)と、ターゲットDB(テストDB)がそろったら、アセスメント(テスト)を実行可能です。RDS for PostgreSQL用のターゲットDBも用意し、さっそくアセスメントを実行します。

image.png

アセスメントを実行すると、以下のように結果が表示されます。

image.png

エラーになったSQLを見てみると、一時テーブルをサポートしていないことによるエラーであることがわかります。

image.png

image.png

実行計画も確認できます。

image.png

また、Aurora DSQL ではバージョン情報を 16 と返すのは興味深いですね。
※左が RDS for PostgreSQL 16.9 で右が Aurora DSQL です。

image.png

今回はテスト用にいくつかのSQLを実行しただけですが、このようにまとめてSQLの互換性テストを実行できることが確認できました。

制限事項

なお、Aurora DSQL を Insight SQL Testing でターゲットDBとして使用する場合は以下の制限があります。

  • Bedrockを活用したSQL修正のリコメンド機能は利用不可 (Aurora DSQL の情報を知らないため)
  • アセスメントオプションにおける「DBへのデータ反映」オプションは「何もしない」のみ使用可能
    • その他のオプションではPostgreSQLの「savepoint」を使用しているが Aurora DSQL では「savepoint」をサポートしていないため

これらの制限を認識の上、ぜひ試してみてください!

おわりに

本ブログでは、Aurora DSQL 利用における互換性問題の紹介と、Insight SQL Testing を使ったSQL互換性アセスメントについて紹介しました。ドキュメントに記載された変更点を全て把握し、これまで実行されてきた膨大なアプリケーションSQLが新しいバージョンや Aurora DSQL 環境で問題なく動作するかを、手動で全て洗い出すのは非常に困難で時間のかかる作業です。Aurora DSQL に移行したいけど「今までのアプリが動くかなぁ、、、」と互換性に不安を抱えていた方はぜひ Insight SQL Testing のようなツールの活用もご検討ください。

Insight SQL Testing へのお問合せはこちら ↓↓↓

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?