Prueba de consultas SQL en múltiples sistemas de bases de datos

Estoy involucrado en un proyecto de migración de Oracle a PostgreSQL, y estoy buscando una forma de automatizar la prueba de una gran cantidad de consultas convertidas de la sintaxis de Oracle a la de PostgreSQL. Se supone que los datos se han migrado correctamente, por lo que no es necesario comprobarlo. Puedo hackear una solución desde cero usando Perl o Python, pero puede haber formas más fáciles. Estaba mirando los marcos de prueba de la base de datos, como Test :: DBUnut o pgTap, pero asumen que un usuario proporciona resultados para verificar y, en mi caso, estos se obtienen de la base de datos desde la que estamos migrando. Una pregunta es, ¿existe una herramienta específica de base de datos o un marco de prueba existente para ejecutar consultas en bases de datos antiguas (Oracle) y nuevas (PostgreSQL), obtener los resultados y compararlos, destacando las diferencias y los errores que puedan ocurrir en el proceso?

preguntado el 08 de noviembre de 11 a las 11:11

2 Respuestas

¿Qué tal crear un proyecto JUnit que ejecute la consulta correspondiente en diferentes esquemas (uno Oracle y el otro PostgreSQL)?

Alternativamente, puede crear dos proyectos simples de Maven (uno por cada proveedor), cada proyecto usará un Complemento SQL para ejecutar sus consultas (péguelas en el mismo orden en pom.xml). Posteriormente, puede automatizar estas pruebas mediante el uso de un servidor de integración continua que admita Maven (¿Hudson?) Y establecer una ejecución programada.

¡Buena suerte!

respondido 08 nov., 11:18

Gracias, pero, desafortunadamente, Java está fuera de mi área de especialización. - Alexk

Terminé escribiendo una herramienta personalizada para ejecutar consultas en ambas bases de datos y recopilar resultados usando python psycopg2 y cx_oracle. Compararlos es cuestión de calcular hashes para cada fila y comprobar si la fila de Oracle existe en el hash de las filas de postgresql. Un par de trampas:

  • los números de punto flotante pueden perder precisión cuando se convierten de Oracle / PostgreSQL a Python. Use ganchos específicos de tipo en los controladores (consulte la documentación) para asegurarse de convertirlos a Decimal, no a flotante.

  • es tentador leer una fila a la vez de ambas bases de datos, comparar sus valores y seguir adelante. Sin embargo, eso no funcionará, a menos que el resultado de SQL se ordene explícitamente (con ORDER BY). Desafortunadamente, leer todos los resultados a la vez significa que necesita mucha memoria para las consultas que producen muchas filas.

  • es necesario distinguir entre consultas que producen resultados iguales y aquellas que producen 0 filas en ambas bases de datos. Se debe examinar este último y si las consultas contienen parámetros, se deben revisar sus valores.

Respondido el 12 de enero de 12 a las 13:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.