仅在不存在的情况下通过liquidbase添加新列



我想在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>

相关内容

  • 没有找到相关文章

最新更新