我想在spring启动启动时使用liquidbase向现有表添加新列。
但是在我正在使用的特定模式中,我已经手动添加了它。
所以我得到一个错误启动指示列已经存在(因为它确实存在):
Error creating bean with name 'liquibase' defined in class path resource
[...LiquibaseConfiguration.class]: LiquibaseException:
liquibase.exception.MigrationFailedException: Migration failed for
change set db/changelog/AlterTable_MyTable_AddNewCol.xml::1::me (manual):
Reason: liquibase.exception.DatabaseException:
Duplicate column name 'new_col' [Failed SQL: (1060)
ALTER TABLE my_schema.my_table ADD new_col INT NULL]
是否有一个liquidbase先决条件选项,仅当列不存在时才添加列?如果它已经存在,不要出错?
我尝试了以下操作,结果出现了上述错误:
<databaseChangeLog ... >
<changeSet author="me (manual)" id="1">
<preConditions onFail="WARN">
<columnExists tableName="my_table" columnName="new_col" />
</preConditions>
<addColumn tableName="my_table">
<column name="new_col" type="integer"/>
</addColumn>
</changeSet>
</databaseChangeLog>
在代码中columnsExists
周围添加<not>
标记,如下所示:
<databaseChangeLog ... >
<changeSet author="me (manual)" id="1">
<preConditions onFail="WARN">
<not>
<columnExists tableName="my_table" columnName="new_col" />
<not>
</preConditions>
<addColumn tableName="my_table">
<column name="new_col" type="integer"/>
</addColumn>
</changeSet>
</databaseChangeLog>