运行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>
答案 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'
,但无论如何这不是一个好主意。