sapp
@sapp

Phing + DbDeploy, откат к предыдущей ревизии?

Стоит задача настроить более-менее автоматизированное версионирование для баз данных (MySQL) на веб-проектах. Для кода используется Mercurial. С базами долго гуглил и пришёл к варианту Phing+DbDeploy.

Теперь возникла проблема. Настроил Phing+DbDeploy по оригиналу этой статьи: habrahabr.ru/post/63585/
Но статья не покрывает собственно использования undo-функционала. То есть, при такой настройке просто нет способа автоматизированно откатиться к какой-либо из предыдущих ревизий базы.

Усердное гугление решений не дало результатов. Решал ли кто-то эту задачу? Может быть, какие-то хорошие альтернативы Phing и DbDeploy есть? Держу на примете Liquibase, но пока останавливает то, что он требует явы.

Жажду ваших советов, друзья!
  • Вопрос задан
  • 3070 просмотров
Пригласить эксперта
Ответы на вопрос 2
blo
@blo
инженер-программист
Скорее всего придется писать вспомогательный скрипт на удобном для вас языке.
У вас все данные для этого есть: таблица changelog и файлы в папке deltas.
Все что нужно — это сравнить эти два списка (задача вспомогательного скрипта), для разницы выполнить задание dbdeploy и затем exec и выполнением суммарного undo скрипта.
Ответ написан
daeto
@daeto
Хм… Может, в вашем случае будет достаточно добавить в таск полный дамп БД перед выкатом новой версии и восстановление её из дампа при откате? Или БД очень напряжённо используется и потеря данных за время, требующееся для проверки, критична?

Если же очень хочется версионировать схему БД, то лучше это делать при помощи полноценных миграций (c up() и down()) вместо дельт в одну сторону. Есть разные библиотеки для этого, в зависимости от используемых технологий вам может лучше подойти та или иная. Или просто сделать по аналогии с описанным, но файлы и для up, и для down.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы