2014-03-18 4 views
3

В настоящее время я использую Liquibase с набором изменений на основе SQL, и большинство из них содержат инструкции INSERT. Согласно документации, этот тип операции обновления не производит (по инструменту) операторов автоматического отката.Сделка транзакций Откат набора изменений Liquibase

Мой вопрос (возможно, что-то не хватает), поскольку мы можем объявить, что определенный набор изменений может выполняться в контексте транзакции БД, если ошибка возникает при применении набора изменений, может ли инструмент (ликбаза) просто выдать откат транзакции для этого конкретного набора изменений?

Мое дело в том, что в настоящее время все эти сценарии являются частью процесса разработки, и эти сценарии еще не окончательны, а это значит, что кто-то меняет контент, и мы отвечаем им с нуля. Если в сценарии вставки строки 2000 есть ошибка в SQL, я бы хотел, чтобы инструмент автоматически откатывал текущую транзакцию и не фиксировал изменения в БД.

Большое спасибо за любые советы

ответ

3

Во время процесса обновления LiquiBase работает каждый набор изменений в транзакции и закатывает его обратно, если есть какие-либо ошибки. Таким образом, если у вас есть вставка строки 2000 с ошибкой на полпути, она будет неудачной, как ожидалось, и откатится автоматически.

То, что не сгенерировано автоматически, это SQL, чтобы «откат» (в этом случае удалить) вставки после их фиксации. Если вы укажете блок в вашем наборе changeSet, после того, как обновление будет успешно выполнено и будет выполнено, вы можете позже запустить «rollibase rollback v2.3», и он будет отменять изменения с тега v2.3. Он не может полагаться на функциональность отката базы данных, поскольку она уже выполнена.

Возможно, это немного запутанно, так как откат в этом случае отличается от обычного использования базы данных термина «откат» в контексте транзакции.

Смежные вопросы