2011-11-08 8 views
4

私はOracleからPostgreSQLへの移行プロジェクトに携わっています。Oracle構文からPostgreSQLに変換された多数のクエリのテストを自動化する方法を探しています。データは正常に移行されたため、確認する必要はありません。私は、PerlやPythonを使ってゼロからソリューションをハックすることができますが、より簡単な方法があるかもしれません。私はデータベーステストフレームワーク、lke Test :: DBUnutまたはpgTapを見ていましたが、ユーザが検証するための結果を提供していると仮定しています。私の場合、これらは私たちが移行しているデータベースから得られたものです。問題は、古い(Oracle)データベースと新しい(PostgreSQL)データベースに対してクエリを実行し、結果を得て比較し、その差異とプロセスで発生する可能性のあるエラーを強調表示する既存のデータベース固有のツールまたはテストフレームワークですか?複数のデータベースシステムに対するSQLクエリのテスト

答えて

2

対応するクエリを異なるスキーマ(1つのOracleと他のPostgreSQL)で実行するJUnitプロジェクトを作成する方法はありますか?

また、プロジェクトごとにSQL Pluginという2つの単純なMavenプロジェクトを作成することもできます(それぞれのプロジェクトでは、同じ順序でpom.xmlにペーストできます)。 Maven(Hudson?)をサポートする継続的な統合サーバーを使用してこれらのテストを後で自動化し、スケジュールされた実行を設定することができます。

幸運を祈る!

+0

ありがとうございます。残念ながら、Javaは私の専門知識の範囲外です。 – alexk

0

私は両方のデータベースに対してクエリを実行し、python psycopg2とcx_oracleを使用して結果を収集するためのカスタムツールを作成しました。それらを比較することは、各行のハッシュを計算し、postgresql行のハッシュにOracle行が存在するかどうかをチェックすることです。落とし穴のカップル:のpythonへのOracle/PostgreSQLのから変換するとき

  • 浮動小数点数は精度を失うことができます。ドライバーでタイプ固有のフックを使用して(ドキュメンテーションを参照)、フロートではなく10進数に変換してください。

  • 両方のデータベースから一度に1つの行を読み込み、その値を比較して移動するのは魅力的です。ただし、SQL結果が明示的に(ORDER BYで)順序付けされていない限り、これは機能しません。残念なことに、結果をすべて一度に読み取ると、たくさんの行を生成するクエリに多くのメモリが必要になります。

  • 等しい結果をもたらすクエリ と、両方のデータベースで0行を生成するクエリとを区別する必要があります。後者は検査された である必要があり、クエリにパラメータが含まれている場合、その値は に変更する必要があります。

関連する問題