はじめに
本記事はDB Tech Showcase 2024 の2日目(7/12)において HPE の篠田さんが講演された「使い慣れたSQLに潜む実装依存」のレポートです。
公式セッション紹介
Oracle Database 23aiでは一部のPostgreSQLやMySQL構文がサポートされるようになりましたが動作が異なる部分もあります。いつも普通に使っているSQL文や関数の微妙な動作の違いについて、代表的なRDBMSを使って説明します。
発表資料
概要/おすすめポイント
リレーショナルデータベースにおけるデータベースエンジンの差については、ある程度認識が共有されていると思います。
データベースエンジンの変更において特にアプリケーション側に影響がある変更点としてはSQLの実装の差があります。大前提としてSQL標準に沿ったSQLは、基本的にはどのデータベースエンジンでも同じ結果が得られますが、一方で、実装の差によって違った結果が得られる場合もあります。
本セッションではその実装の差による結果の違いについて、実際に実行したSQL文と結果を例に紹介されています。
差があるのは知っていても実際にどうなるのか知りたい方は、是非発表資料の例を参照してみてください。
複雑なSQL文ではなく、1行コピペですぐに試せるSQLですので、実際に手元の環境で叩いて確認しても面白いかと思います。
セッション内容の紹介
セッションでは以下の区分においてそれぞれで幾つか例を挙げて差を説明されてました。
- 構文
- 関数
- データ型と演算子
特にエラーになるものよりも、エラーなく実行はできるが結果(アウトプット)が違うものについて楽しそうに説明されていたのが印象的でした。
個人的には構文の中の「トランザクション中のエラー」や有名なOracle DatabaseにおけるNULLの扱いが、PostgreSQLへのマイグレを行う際によく注意点としてあがるので興味を引きました。
まとめ
一般的にデータベースエンジンによって結果に違いがある、という知識とデータベースエンジン変更の際に注意する点としての認識はもっていましたが、今回のセッションでは構文や関数などそれぞれのデータベースエンジンの実装によって違いがある部分について、それぞれ実際の結果が例示されていてわかりやすかったです。
実際に 互換 とされているデータベースエンジン、例えば MySQL と TiDB や Spanner の PostgreSQL Interfaceとかで試すとどうなるか、機会があったら試してみようと思いました。
おまけ
よく検討されるデータベースエンジンの変更としては、Oracle DatabaseからPostgreSQLへの変更などが挙げられます。今回のようなSQLの実装の違い以外にもオブジェクトの差分などを見つけてサジェストしてくれたりします。
代表的なツールはクラウドのツールが多いですが、DBTSのオーガナイザのインサイトテクノロジーさんもInsight Data Testingを出してます(今回もセッションありましたが聞けず・・・)。