Я выполняю diff в удаленной базе данных mysql с использованием LiquiBase и обнаруживаю, что генерируемый набор изменений использует неправильный облик для имен таблиц (все строчные буквы). Это впоследствии приводит к сбою обновления.
Я делаю что-то неправильно или это ошибка?
Здесь моя задача diff:
<target name="diff-database" depends="prepare">
<echo message="Diff ${database.url} to base ${production.database.url}" />
<diffDatabaseToChangeLog driver="${database.driver}"
url="${production.database.url}"
username="${production.database.username}"
password="${production.database.password}"
baseUrl="${database.url}"
baseUsername="${database.username}"
basePassword="${database.password}"
outputFile="${changeLogFile}" classpathref="liquibase-path">
</diffDatabaseToChangeLog>
</target>
Это генерирует (среди других записей):
<changeSet author="Marty (generated)" id="1264010991558-2">
<addColumn tableName="project">
<column name="earliestUpdatedRevision" type="BIGINT"/>
</addColumn>
</changeSet>
Запуск обновления против этой панели изменений вызывает следующее:
liquibase.exception.MigrationFailedException: Migration failed for change set changelogs/mysql/complete/root.changelog.xml::1264010991558-2::Marty (generated):
Reason: liquibase.exception.JDBCException: Error executing SQL ALTER TABLE `project` ADD `earliestUpdatedRevision` BIGINT:
Caused By: Error executing SQL ALTER TABLE `project` ADD `earliestUpdatedRevision` BIGINT:
Caused By: Table 'xxx.project' doesn't exist
Фактическое имя таблицы - "Проект". Если я изменяю changeEntry для использования правильного корпуса, он работает.
Любые предложения о том, как правильно это сделать?
Привет
Марти
Кажется, это ошибка. Есть места, где мы сокращаем имена таблиц case для правильной работы с базами данных, не учитывающих регистр, но тогда это создает проблемы с чувствительными к регистру базами данных.
Улучшения в инструменте diff запланированы для LiquiBase 2.1.