Liquibase"无法释放锁定"错误

时间:2014-10-30 13:25:56

标签: java sql foreign-keys liquibase

运行Liquibase变更集时出现以下错误: Could not release lock。基本异常实际上是SQLException: Connection is closed!

变更集包含renameColumn

<changeSet author="me" id="renameaTob">
    <renameColumn newColumnName="b" oldColumnName="a" columnDataType="BIGINT(19)" tableName="aTable" />
</changeSet>    

1 个答案:

答案 0 :(得分:0)

问题在于要重命名的列是外键约束的一部分。

解决方案是首先删除约束,然后使用新列名再次添加它。但是如果所有这些操作都在同一个变更集中完成,那么结果就没有什么不同了。因此必须将其拆分为两个变更集:第一,删除约束并重命名列,然后重新创建外键约束。

<changeSet author="me" id="renameaTob">
    <dropForeignKeyConstraint baseTableName="aTable" constraintName="a_c_fk2"/>
    <renameColumn newColumnName="b" oldColumnName="a" columnDataType="BIGINT(19)" tableName="aTable" />
</changeSet>

<changeSet author="me" id="addFkAgain">
    <addForeignKeyConstraint baseColumnNames="b"
            baseTableName="aTable" constraintName="b_c_fk2"
            deferrable="false" initiallyDeferred="false" onDelete="NO ACTION"
            onUpdate="NO ACTION" referencedColumnNames="c" referencedTableName="refTable" />
</changeSet>

我认为也可以只使用一个变更集并添加runInTransaction='false',但无论如何这不是一个好主意。