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
?喜欢:<dropColumn tableName="CE_SOME_TABLE" columnName="some_column2" schemaName="YOUR_SCHEMA"/>
感谢您的回复,但我最近找到了答案,我会写在下面的评论中。
【参考方案1】:
changeSet 包括通过删除 some_column
来修改 SOME_TABLE
然后在同一个 changeSet 中,我修改了具有旧 some_column
值的 VIEW 表,因为它不再需要了
我得到异常的原因是当从表中删除列时,视图表仍然持有它并且没有让它删除
我是如何解决的:
通过删除some_column
变量来更改视图表
然后从SOME_TABLE
中删除some_column
【讨论】:
以上是关于liquibase 迁移失败,而 dropColumn 布尔变量的主要内容,如果未能解决你的问题,请参考以下文章
稍后创建Liquibase ChangeLog和LogLock表,而不会使已执行的脚本失败
如果运行 spring boot 并让 liquibase 自动执行迁移,则 Liquibase databasechangelog 表存储相对路径