java - Liquibase diff 使用表名的错误大小写生成变更集

标签 java mysql liquibase

我正在使用 LiquiBase 对远程 mysql 数据库进行比较,发现生成的变更集使用了不正确的表名大小写(全部小写)。这随后会导致更新失败。

  • Liquibase v1.9.5
  • 数据库:MySQL
  • 本地操作系统:Windows 7
  • 远程操作系统:Ubuntu

我做错了什么,还是这是一个错误?

这是我的差异任务:

<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

实际表名是“Project”。如果我修改 changeEntry 以使用正确的大小写,它就可以工作。

关于如何让它正常工作有什么建议吗?

问候

马蒂

最佳答案

这似乎是一个错误。有些地方我们将表名小写以在不区分大小写的数据库中正常工作,但随后它会导致区分大小写的数据库出现问题。

差异工具的改进计划用于 LiquiBase 2.1。

关于java - Liquibase diff 使用表名的错误大小写生成变更集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2104185/

相关文章:

mysql - Rails 3 - 突然挂起的迁移错误

mysql - TypeScript 正确输入查询结果 MySQL

database - Liquibase 和 Terraform 最佳实践

jhipster - 有没有办法在没有 Liquibase 的情况下生成 jHipster 代码?或者禁用Liqibase? JHipster 4.7.0

java - 处理 100 万条记录的执行器框架

java - 使用 Selenium Webdriver 在网页中移动鼠标

java - Eclipse 插件 - 查找源部件位置

java - javanica 中的 Hystrix 异步方法未在 spring-boot java 应用程序中运行

php - 如何使用 IN 查询在 solr join 中执行多个条件?

java - liquibase 更改主键粒度