2015-02-09 1 views
0

У меня есть процесс, после которого каждое изменение, внесенное в db, обновляется в собственном файле sql, а файл sql передается внутри собственного файла changeset.xml. Например, table1.sql имеет table1.xml, который использует тег для обращения к этому sql. Таблица1.sql имеет некоторые изменения для объекта table1 в базе данных.Откат Liquibase не является разумным для определения порядка выполнения операторов. Это верно?

Предположим, что существует обновленная куча обновляемых объектов, таблица триггеров, ссылающаяся на таблицу1, спецификация пакета и ссылка на тело, ссылающаяся на таблицу1, и таблицу привязки ограничений1. Операторы sql для этих объектов находятся в соответствующих файлах sql, таких как trigger1.sql, упомянутых внутри trigger1.xml, constraint1.sql, указанных внутри constraint1.xml и т. Д.

Теперь операторы отката для соответствующих xmls фокусируются только на этом объекте , Например, trigger1.xml имеет тэг rollback только для того, чтобы отбросить триггер1, и аналогично constrain1.xml имеет откат только для удаления contstraint1.

всех CHANGELOG XMLs упорядочиваются внутри мастер-XML, который определяет порядок обновления, как в том числе первый table1.xml, constrain1.xml, trigger1.xml и т.д ..

Мой вопрос, я застрял с этим либо подхода или самой ликбазы, потому что команда rollbackSQL не генерирует sqls в правильном порядке, например, сначала запускает триггер, сначала останавливает ограничение, а затем, наконец, бросает таблицу1. Предположим, что более крупный сценарий сложных изменений, взаимозависимых на других объектах, которые не могут быть откатами bcuz, порядок недостаточно интеллектуальный.

Как справиться с этой ситуацией? Есть ли другой подход?

+0

Вы должны решить свой вопрос, чтобы было легче читать, если вы хотите получить больше ответов. Я думаю, что Liquibase выполнит инструкции отката в обратном порядке. Вы говорите, что этого не происходит? Или вы ожидаете, что ликбаза станет разумным способом (а не просто наоборот)? – Jens

+0

@Jens. Я думал, что мой вопрос был уже прямолинейным. Во всяком случае, мой вопрос заключается в том, чтобы понять, является ли Liquibase только для изменения порядка изменений в сценарии отката или у него также есть возможности выяснить, в каком порядке должен быть откат казнят? –

+0

Ваш комментарий намного короче и понятен. :-) Неважно. Я думаю, что другие, а затем выполняющие все изменения в обратном порядке, когда «rollback» выполняется, Liquibase не обладает «умными» возможностями. Хотя я должен сказать, что я не контролирую весь код ликбезы и функциональность, поэтому я мог ошибаться. НО: 'rollback' может быть выведенным в файл (а не выполняться непосредственно в базу данных) с помощью' rollbackSQL'. Затем вы переупорядочиваете их самостоятельно. Не супер-удобный, а способ пойти. – Jens

ответ

1

Вы правы - Liquibase не предпринимает никаких попыток переоформления наборов изменений. Они запускаются в том порядке, в котором они перечислены в списке изменений.