为何Liquibase仅生成变更日志表却不创建业务表?
问题分析与解决方案
问题原因
你的Maven配置中,Liquibase执行顺序是先跑changelogSync再跑update。changelogSync的作用是将变更日志中的所有条目标记为已执行,但不会实际执行任何数据库变更。在空数据库上执行这个命令后,Liquibase会把releases.xml里的所有创建语句记录到DATABASECHANGELOG表,但不会真正创建业务表;后续执行update时,Liquibase检查到这些变更已经标记为已执行,就不会再执行创建操作。
解决步骤
1. 修改Maven配置,移除changelogSync目标
保留update即可,空数据库初始化只需要update命令,它会自动创建Liquibase跟踪表和所有业务表。修改后的插件执行配置如下:
<executions> <execution> <phase>process-resources</phase> <goals> <goal>update</goal> </goals> </execution> </executions>
2. 清理已标记的执行记录(如果已经运行过原配置)
如果已经执行过原配置导致DATABASECHANGELOG里有了业务表的执行记录,需要先清除这些标记:
- 方式一:直接清空数据库中的
DATABASECHANGELOG表 - 方式二:执行Liquibase的
changelogSyncClear命令,清除所有已标记的执行记录:mvn liquibase:changelogSyncClear -P liquibase-default
完成以上操作后,重新运行Maven构建,Liquibase就会正常创建所有业务表。
内容的提问来源于stack exchange,提问作者Mulgard
相关产品推荐
相关产品推荐

