Тестирование SQL-запросов к нескольким системам баз данных - PullRequest
4 голосов
/ 08 ноября 2011

Я участвую в проекте по миграции с Oracle на PostgreSQL и ищу способ автоматизировать тестирование большого количества запросов, преобразованных из синтаксиса Oracle в PostgreSQL.Предполагается, что данные были успешно перенесены, поэтому нет необходимости проверять это.Я могу взломать решение с нуля, используя Perl или Python, но могут быть более простые способы.Я смотрел на структуры тестирования базы данных, lke Test :: DBUnut или pgTap, но они предполагают, что пользователь предоставляет результаты для проверки, и в моем случае они получены из базы данных, из которой мы выполняем миграцию.Вопрос заключается в том, существует ли существующий инструмент для конкретной базы данных или среда тестирования для выполнения запросов к старой (Oracle) и новой (PostgreSQL) базам данных, получения результатов и их сравнения, выделяя различия и любые ошибки, которые могут возникнуть в процессе?

Ответы [ 2 ]

2 голосов
/ 08 ноября 2011

Как насчет создания проекта JUnit, который выполняет соответствующий запрос на разных схемах (один Oracle, другой PostgreSQL)?

В качестве альтернативы, вы можете создать два простых проекта Maven (по одному на каждого поставщика), каждый проект будет использовать Плагин SQL для выполнения ваших запросов (вставьте их в том же порядке в pom.xml).Позже вы можете автоматизировать эти тесты, используя сервер непрерывной интеграции, который поддерживает Maven (Хадсон?), И установить запланированное выполнение.

Удачи!

0 голосов
/ 12 января 2012

В итоге я написал собственный инструмент для запуска запросов к обеим базам данных и сбора результатов с использованием python psycopg2 и cx_oracle.Их сравнение заключается в вычислении хэшей для каждой строки и проверке того, существует ли строка оракула в хэше строк postgresql.Несколько ловушек:

  • числа с плавающей запятой могут потерять точность при преобразовании из Oracle / PostgreSQL в python.Используйте специфические для типа хуки в драйверах (см. Документацию), чтобы убедиться, что вы конвертируете их в десятичное, а не в плавающее.

  • заманчиво просто читать по одной строке за раз из обеих баз данных, сравнитьего значения и двигаться дальше.Однако это не сработает, если результат SQL не упорядочен явно (с ORDER BY).К сожалению, одновременное чтение результатов означает, что вам нужно много памяти для запросов, генерирующих много строк.

  • необходимо различать запросы, выдающие одинаковые результаты, и запросы, которые выдают 0 строк вобе базы данных.Последние должны быть изучены, и если запросы содержат параметры, их значения должны быть пересмотрены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...