Liquibase diffChangeLog变更集顺序错误:新增列与触发器部署失败
Liquibase diffChangeLog 生成变更集顺序错误导致触发器创建失败的问题
问题重现步骤
- 执行
diffChangeLog,确认referenceUrl与目标数据库url完全一致; - 通过SSMS图形管理工具为某表新增一列
FK_MYCOL; - 同样通过SSMS为该列添加触发器
TRG_MYTRIGGER; - 再次执行
diffChangeLog,生成包含两个changeSet节点的变更日志; - 执行
liquibase update更新目标数据库时触发错误,原因是Liquibase将新增列的变更集放在了触发器之后,导致触发器创建时找不到对应列。
报错信息
Run: 1 Previously run: 439 Filtered out: 0 Failed deployment: 15 ------------------------------- Total change sets: 455 ERROR: Exception Details ERROR: Exception Primary Class: SQLServerException ERROR: Exception Primary Reason: Invalid column name 'FK_MYCOL'. ERROR: Exception Primary Source: Microsoft SQL Server 12.00.429 [2025-04-29 08:07:08] SEVERE [liquibase.integration] Migration failed for changeset changelogs/db.changelog-mychangelog.xml::1745859476354-1::my name: Reason: liquibase.exception.DatabaseException: Invalid column name 'FK_MYCOL'. [Failed SQL: (207) -- Create trigger to auto-assign value on insert ALTER TRIGGER TRG_MYTRIGGER ON [dbo].[mytable] AFTER INSERT AS BEGIN SET NOCOUNT ON; ...etc
生成的变更日志内容
<changeSet author="my name" id="1745859476354-1"> <pro:createTrigger disabled="false" path="objects-1745859476417/trigger/mytable_TRG_MYTRIGGER-0989f09f.sql" relativeToChangelogFile="true" replaceIfExists="true" tableName="mytable" triggerName="TRG_MYTRIGGER"/> </changeSet> <changeSet author="my name" id="1745859476354-2"> <addColumn tableName="mytable"> <column name="FK_MYCOL" type="nchar(36)"/> </addColumn> </changeSet>
已尝试的解决方法
- 手动调整变更集顺序后可正常执行,但理想状态下Liquibase应自动识别新增列需先于关联触发器创建;
- 生成SQL脚本执行,仍出现触发器先于新增列创建的问题。
请问是否有其他人遇到并复现过该问题?
内容的提问来源于stack exchange,提问作者WEBjuju
相关产品推荐
相关产品推荐

