Как сохранить замечание при обновлении типа столбца в liquibase?

#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.