Liquibase diff使用表名上的错误情况生成变更集

时间:2010-01-20 19:14:10

标签: java mysql liquibase

我正在使用LiquiBase在远程mysql数据库上执行diff,并发现生成的变更集使用了不正确的表格名称(全部小写)。这随后导致更新失败。

  • 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以使用正确的外壳,它就可以工作。

有关如何使其正常工作的任何建议吗?

此致

玛蒂

1 个答案:

答案 0 :(得分:2)

这似乎是一个错误。有些地方我们可以使用不区分大小写的数据库来小写表名称,但是这会导致区分大小写的数据库出现问题。

为LiquiBase 2.1安排了差异工具的改进。