You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Liquibase Diff对比SQL Server数据库时出现未知约束类型错误

解决Liquibase Diff报错:Unknown constraint type: 3(SQL Server环境)

我来帮你搞定这个Liquibase Diff报错的问题!你遇到的Unknown constraint type: 3错误,在SQL Server环境下通常是Liquibase对特定约束类型识别不兼容导致的,结合你的场景(两个库都是用liquibase:update创建的),给你几个针对性的解决办法:

1. 优先检查Liquibase与SQL Server JDBC驱动的版本兼容性

这个错误大概率是版本不匹配引发的兼容性问题:

  • 如果你用的是SQL Server 2019及以上版本,建议升级到Liquibase 4.10+,同时搭配**mssql-jdbc 10.2+**版本的驱动(注意驱动版本要匹配你的JDK版本,比如JDK11用mssql-jdbc:12.4.0.jre11)。
  • Maven依赖配置示例:
    <dependency>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-core</artifactId>
        <version>4.23.0</version> <!-- 选择最新稳定兼容版 -->
    </dependency>
    <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>mssql-jdbc</artifactId>
        <version>12.4.0.jre11</version>
    </dependency>
    

2. 排除系统自动生成的约束对比

SQL Server会自动创建一些系统约束(比如默认约束、索引关联约束),这些约束可能不在Liquibase的常规识别范围内,你可以通过配置排除它们:

  • 命令行方式:添加参数排除系统约束
    liquibase diff --diffExcludeObjects="SYSTEM_CONSTRAINTS"
    
    如果你想更精准排除,也可以指定具体类型:
    liquibase diff --diffExcludeObjects="CHECK_CONSTRAINTS,DEFAULT_CONSTRAINTS"
    
  • Maven插件方式:在插件配置里添加排除规则
    <plugin>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-maven-plugin</artifactId>
        <configuration>
            <!-- 其他配置... -->
            <diffExcludeObjects>SYSTEM_CONSTRAINTS</diffExcludeObjects>
        </configuration>
    </plugin>
    

3. 手动排查类型为3的约束是什么

你可以先在SQL Server里查询类型为3的约束,明确具体是什么约束导致的问题:

SELECT name, type_desc, type, schema_id
FROM sys.objects
WHERE type = 3;

查询结果里的type_desc会告诉你约束的具体类型,如果是系统自动生成的约束,直接用上面的排除规则即可;如果是自定义的特殊约束,可能需要编写自定义的Liquibase扩展来支持识别。

4. 升级到Liquibase最新稳定版

这个错误可能是旧版本Liquibase的已知bug,官方在后续版本中修复了很多SQL Server的兼容性问题,直接升级到最新稳定版往往能解决这类识别问题。

内容的提问来源于stack exchange,提问作者Bobby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:27:36