#groovy #liquibase
#groovy #liquibase
Вопрос:
Я пытаюсь обновить тип столбца, используя modifyDataType в Groovy DSL. После того, как я запустил обновление liquibase с помощью liquibase-maven-plugin (версия 3.8.9), я обнаружил, что замечание столбца исчезло.
вот мой код:
changeSet(author: "root", id: "20201218-modify-data-type") {
modifyDataType(columnName: "description", newDataType: "text", tableName: "t_user")
rollback {
modifyDataType(columnName: "description", newDataType: "varchar(2000)", tableName: "t_user")
}
}
Я не могу добавить параметр «remark» в modifyDataType(), потому 'remarks' is an invalid property for 'modifyDataType' changes
что .
Комментарии:
1. Какую платформу базы данных вы используете? Возможно, это не было реализовано в Liquibase для используемой вами платформы. Если вы считаете, что это ошибка, и, пожалуйста, зарегистрируйте ошибку здесь: github.com/liquibase/liquibase/issues
2. @ronak, это MySQL.
Ответ №1:
Способ, которым MySQL реализует их ALTER TABLE MODIFY COLUMN
, таков, как если бы он удалял старый столбец и добавлял новый. При этом теряются не только замечания, но и ограничения или первичные ключи или что-либо еще, связанное со «старым» столбцом.
Мы не добавили все эти поля modifyDataType
, поскольку на самом деле нет конца тому, что мы должны были бы туда включить. Вместо этого, если вы изменяете тип данных в mysql, вам нужно заново установить примечания, первичные ключи и т. Д. В отдельных вызовах.
Для mysql мы выводим предупреждение о потере информации о первичном ключе / ограничении, но мы показываем его только для типов данных, отличных от varchar, чтобы уменьшить количество предупреждений. Поскольку это влияет на такие вещи, как замечания, которые могут быть в varchars, вероятно, стоит удалить эту часть проверки, не связанную с varchar.