liquibase 迁移失败,而 dropColumn 布尔变量

Posted

技术标签:

【中文标题】liquibase 迁移失败,而 dropColumn 布尔变量【英文标题】:liquibase migration failed while dropColumn boolean variable 【发布时间】:2018-05-11 05:59:50 【问题描述】:

我正在使用 Liquibase 链接数据库 (H2) 更改,最近我面临删除不必要的列迁移异常: Caused by: org.h2.jdbc.JdbcSQLException: View "ALTER TABLE PUBLIC.CE_SOME_TABLE DROP COLUMN some_column" is invalid: "Column ""SOME_TABLE .SOME_COLUMN"" not found [42122-190]"; SQL statement: ALTER TABLE PUBLIC.CE_SOME_TABLE DROP COLUMN some_column[90109-190]

我尝试了以下方法:

    检查我的数据库是否真的找到了这样的列:

select column_name from information_schema.columns where table_name='ce_some_table';

它表明该表中的其他列存在这样的列名

    尝试在 liquibase 中编写 SQL 语句:

<sql>ALTER TABLE ce_some_table DROP COLUMN some_column;</sql>

没有完成任务

    试图重命名变量(认为数据库元数据已兑现):

    <renameColumn catalogName="some_catalog" columnDataType="boolean" newColumnName="some_column2" oldColumnName="some_column" remarks="A Boolean" schemaName="public" tableName="CE_SOME_TABLE"/>

然后删除更新的列:

<dropColumn tableName="CE_SOME_TABLE" columnName="some_column2"/>

也没有成功

    已尝试从其他表中删除其他布尔列(有 +20 个其他表)- 无效 已尝试删除其他数据类型列 - 它有效(但不能使用布尔值)

接下来我可以尝试任何建议吗?

我已经检查了区分大小写并且所有内容都匹配,但也许我没有看到所有表格中的内容

提前感谢您的建议或指出原因

更新: 在删除 some_column 后的同一个链集中,我修改了具有 some_column 变量的 VIEW 表

【问题讨论】:

所以您能够重命名该列?也许您需要指定schemaName?喜欢:&lt;dropColumn tableName="CE_SOME_TABLE" columnName="some_column2" schemaName="YOUR_SCHEMA"/&gt; 感谢您的回复,但我最近找到了答案,我会写在下面的评论中。 【参考方案1】:

changeSet 包括通过删除 some_column 来修改 SOME_TABLE

然后在同一个 changeSet 中,我修改了具有旧 some_column 值的 VIEW 表,因为它不再需要了

我得到异常的原因是当从表中删除列时,视图表仍然持有它并且没有让它删除

我是如何解决的:

通过删除some_column 变量来更改视图表

然后从SOME_TABLE 中删除some_column

【讨论】:

以上是关于liquibase 迁移失败,而 dropColumn 布尔变量的主要内容,如果未能解决你的问题,请参考以下文章

Liquibase 脚本失败

稍后创建Liquibase ChangeLog和LogLock表,而不会使已执行的脚本失败

如果运行 spring boot 并让 liquibase 自动执行迁移,则 Liquibase databasechangelog 表存储相对路径

Flyway对比Liquibase(转)

使用 Spring-Boot 启动时的 Liquibase 迁移不起作用

使用不同 DBMS 的 Liquibase 数据库迁移