针对多个数据库系统测试SQL查询

针对多个数据库系统测试SQL查询,sql,unit-testing,database-migration,Sql,Unit Testing,Database Migration,我参与了一个从Oracle到PostgreSQL的迁移项目,我正在寻找一种方法来自动测试大量从Oracle语法转换到PostgreSQL语法的查询。假设数据已成功迁移,因此无需进行检查。我可以使用Perl或Python从头开始破解一个解决方案,但可能有更简单的方法。我正在研究数据库测试框架,lke Test::DBUnut或pgTap,但它们假设用户提供了要验证的结果,在我的例子中,这些结果是从我们正在迁移的数据库中获得的。问题是,是否有一个现有的特定于数据库的工具或测试框架来对旧(Oracle

我参与了一个从Oracle到PostgreSQL的迁移项目,我正在寻找一种方法来自动测试大量从Oracle语法转换到PostgreSQL语法的查询。假设数据已成功迁移,因此无需进行检查。我可以使用Perl或Python从头开始破解一个解决方案,但可能有更简单的方法。我正在研究数据库测试框架,lke Test::DBUnut或pgTap,但它们假设用户提供了要验证的结果,在我的例子中,这些结果是从我们正在迁移的数据库中获得的。问题是,是否有一个现有的特定于数据库的工具或测试框架来对旧(Oracle)和新(PostgreSQL)数据库执行查询,获取结果并进行比较,突出显示过程中可能出现的差异和任何错误?

如何创建JUnit项目,在不同的模式(一个Oracle,另一个PostgreSQL)上运行相应的查询

或者,您可以创建两个简单的Maven项目(每个供应商一个),每个项目将使用一个来运行查询(以相同的顺序将它们粘贴到pom.xml中)。稍后,您可以使用支持Maven(Hudson?)的持续集成服务器自动化这些测试,并设置计划执行


祝你好运

我最后编写了一个自定义工具,使用python psycopg2和cx_oracle对这两个数据库运行查询并收集结果。比较它们需要计算每行的哈希值,并检查postgresql行的哈希值中是否存在oracle行。有几个陷阱:

  • 从Oracle/PostgreSQL转换为python时,浮点数可能会失去精度。在驱动程序中使用特定于类型的挂钩(请参阅文档),以确保将它们转换为十进制,而不是浮点

  • 一次只从两个数据库中读取一行,比较其值,然后继续。但是,除非SQL结果是显式排序的(使用ORDERBY),否则这是行不通的。不幸的是,一次读取所有结果意味着您需要大量内存用于生成大量行的查询

  • 需要区分产生相同结果的查询 以及在两个数据库上都生成0行的数据库。后者应该是 如果查询包含参数,则应检查其值 修改


谢谢,但不幸的是,Java超出了我的专业范围。