繁体   English   中英

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

[英]Testing SQL queries against multiple database systems

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

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

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

祝好运!

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

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

  • 试图一次只从两个数据库中读取一行,比较它的值然后继续前进,这很诱人。 但是,除非将SQL结果显式排序(使用ORDER BY),否则将无法使用。 不幸的是,一次读取所有结果意味着您需要大量内存来进行产生大量行的查询。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM