Контроль данных при развертывании баз данных с помощью dbdeploy
Мы работаем с задачей Phing dbdeploy для контроля версий наших баз данных PostgreSQL, что в целом является хорошим способом работы. У меня нет особых проблем с версиями базы данных после того, как мы начали с ней работать, кроме одного мучительного сомнения: как мы контролируем данные, которые содержит база данных?
Прямо сейчас у меня обычно есть дельта, которая содержит некоторые примеры данных, которые используются для тестирования, но в производственной среде я хочу иметь производственные данные, например, действительные действительные данные. Конечно, я мог бы написать другую дельту, которая усекает тестовые данные и вставить фактические данные, но почему-то это кажется неуклюжим и громоздким, поскольку единственным языком в дельте является SQL. При написании такой дельты обработка последовательностей и проверка правильности отношений с внешним ключом - это настоящая боль.
Поэтому я подумал, что может иметь смысл написать скрипт PHP, который будет импортировать данные, скажем, из файла CSV. Это будет работать, пока не произойдет другое изменение базы данных, которое переименует столбец, что сделает файл PHP бесполезным. Конечно, это легко исправить, обновив сценарий для включения изменений базы данных и повторного запуска сценария, но это подвержено ошибкам, и именно поэтому я начал использовать dbdeploy.
Итак, мой вопрос: как вы обрабатываете данные при развертывании изменений, или более точно: как вы вставляете данные, необходимые рабочей среде?
1 ответ
Вы правы в том, что данные тестирования должны быть исключены из дельт точно так же, как тестирование не должно проводиться в производственной системе. Что вы используете для тестирования? Phpunit, Selenium, ...? Используете ли вы PHP-фреймворк?
В любом случае, лучшим способом может быть использование чего-то, что уже может поставляться с любым инструментом, который вы используете. Например, Symfony 1.x имеет довольно хорошее управление приборами. Для тестирования PHP-кода PHPUnit является стандартом де-факто и поставляется с некоторым управлением приборами. Попробуйте просмотреть документацию по PHPUnit для получения дополнительной информации о том, как он обрабатывает наборы данных: http://www.phpunit.de/manual/current/en/database.html