こんにちは。SCSKの丸山です。
前回、異種データベース移行の3つのステップについてお話しました。
その中から「仕様の壁」について、Oracle DBからPostgreSQLへの異種データベース移行を例にお話していきたいと思います。前々回お話しましたGoogle Cloud をはじめAWSへの移行など、クラウド環境へデータベース移行する際に異種DB移行を考えている方に大いに参考になる内容です!是非、ご覧ください。
まず、私達の定義する「仕様の壁」とは、仕様の差による結果不正や動作差異が発生することを意味します。
同じRDBMSでも、内部アーキテクチャや使用できるSQL句には差異があります。
その中でも、異種データベース移行を実施する中で大変なのが、同じSQL文であっても、データベースによって結果が変わってしまうケース。
この場合、SQL文としては成り立っているのでエラーは出ません。そのため、テストで初めて気づくこととなり対応が遅れたり、思わぬ改修コストが発生する可能性があります。このような「仕様の壁」については、できる限り早い段階で気づき、対応しておくことが大切です。では、SQLは同じでも結果が変わってしまうケースはどのようなものがあるのか、代表的なものをシリーズでお伝えしたいと思います。
ケース1 除算「/」
まず第1回は、除算結果です。SQL文内で除算演算子である「/」を利用する場合、Oracle DBとPostgreSQLでは内部での結果の持ち方が異なるため、注意が必要です。今回は分かりやすく、SQL文内で 10/3*3 の計算があった際の結果 について見ていきましょう。
Oracle DBの場合
除算の際に余りを保持します。そのため、結果は10となります。
SQL> SELECT 10/3*3 AS ANS FROM DUAL; ANS ———- 10 |
PostgreSQLの場合
除算の際に余りを切り捨てます。そのため、結果は9となります。
# SELECT 10/3*3 AS ANS; ans —– 9 |
Oracle DB からPostgreSQLへの移行時の対応
この場合、SQL文内で解決するのは難しいため、SQL文内で除算を実施せずアプリケーション側で除算を実施するなど、Oracle DBと同じ挙動になるような対応が必要になります。このようなケースは、移行方針の検討段階で早めに対応しておきたいところですね。
では、次回もお楽しみに。次回の記事はこちらです。