2014-11-26 4 views
2

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

Но проблема здесь <addDefaultValue/> и <addNotNullConstraint/> теги имеют атрибуты значения по умолчанию, поэтому в итоге я получаю исключение.

Ниже changeSet, что у меня есть,

<changeSet id="f3047816-2d48-4341-a4ce-deface083cea" author="MineStar" failOnError="true"> 
    <preConditions onFailMessage="Ignored AlterColumn for REHANDLE of table LOCATION as column does not exist or already has a NOT NULL constraint." onFail="MARK_RAN"> 
    <columnExists tableName="LOCATION" columnName="REHANDLE"/> 
    <ext:columnIsNullable tableName="LOCATION" columnName="REHANDLE"/> 
    </preConditions> 
    <comment>AHS-1373: AlterColumn LOCATION.REHANDLE - nullability changed from true to false - defaultValue changed from 'null' to '0'</comment> 
    <addDefaultValue columnName="REHANDLE" columnDataType="BOOLEAN" defaultValueNumeric="0" tableName="LOCATION"/> 
    <addNotNullConstraint columnName="REHANDLE" defaultNullValue="0" columnDataType="BOOLEAN" tableName="LOCATION"/> 
</changeSet> 

Вот еще одна странная вещь, которую я мог бы видеть, если я изменить порядок добавления значения по умолчанию, а не нулевые сдерживающие теги не получит каких-либо исключений, что сначала добавляет не нулевое ограничение, а затем значение по умолчанию, как показано ниже. Но я не должен этого делать, поскольку он влияет на контрольную сумму в базе данных, все, что я могу сделать, это добавить новый changeSet для устранения исключения.

<addNotNullConstraint columnName="REHANDLE" defaultNullValue="0" columnDataType="BOOLEAN" tableName="LOCATION"/> 

<addDefaultValue columnName="REHANDLE" columnDataType="BOOLEAN" defaultValueNumeric="0" tableName="LOCATION"/>. 
+0

Почему вы не просто удаляете 'defaultNullValue =" 0 "' из тега 'addNotNullConstraint' (или полностью удаляете' addDefaultValue')? –

+0

Нет, я просто не могу редактировать существующее changeSet, так как это влияет на изменение контрольной суммы набора изменений и означает, что у любого, кто уже запускает старый набор изменений, будет проблема с этим. поэтому все, что я могу сделать, это создать новый changeSet для решения этой проблемы, а также сделать существующий один. – Jai

+0

Eventough Если я удалю defaultNullValue = "0" из тега addNotNullConstraint, он все равно бросает исключение. – Jai

ответ

3

Существует разница между defautlNullValue в addNotNullConstraint и defaultValueNumeric в addDefaultValue. Использование addDefaultValue просто задает значение по умолчанию для будущих строк, вставленных в столбец, но defaultNullValue в addNotNullConstraint заставит Liquibase генерировать дополнительный оператор SQL update location set rehandle=0 where rehandle is null, чтобы изменить значение уже существующих строк, чтобы можно было добавить ограничение на null.

Я бы подумал, что любой заказ будет работать нормально, какое исключение вы видели?

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