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

H2Database升级至2.1.212后建表报90057错误求助

解决H2Database 2.1.212版本创建表时的约束未找到错误(90057)

H2 2.x版本对SQL标准的兼容性要求更严格,你的问题核心在于外键约束的引用目标不满足唯一性校验规则。旧版本H2允许外键引用非唯一的列组合,但新版本会强制检查被引用的列必须是主键,或是有独立的唯一约束。

看你提供的SQL:

constraint foreign_fk foreign key (parent_id, partner) references prov(pid, partner)

这里外键引用的是prov(pid, partner),但你的表中只有包含parent_id的联合唯一约束unique_uk(pid, parent_id, partner),pid+partner这个列组合并没有单独的唯一约束。H2新版本在创建外键时会验证这个引用的唯一性,找不到对应约束就抛出90057错误。

修改方案

方案1:新增pid+partner联合唯一约束(推荐,匹配原外键逻辑)

给pid和partner单独添加联合唯一约束,让外键引用的列组合满足唯一性要求:

drop table if exists prov;

create table prov(
    id bigint generated by default as identity(start with 1) not null primary key,
    pid bigint not null,
    parent_id bigint,
    partner varchar(255),
    constraint unique_uk unique(pid, parent_id, partner),
    constraint pid_partner_unique unique(pid, partner), -- 新增该唯一约束
    constraint foreign_fk foreign key (parent_id, partner) references prov(pid, partner)
);

方案2:调整外键引用列,匹配已有唯一约束(需业务逻辑允许)

如果你的外键逻辑实际是要引用pid+parent_id+partner这个组合,可修改外键定义:

drop table if exists prov;

create table prov(
    id bigint generated by default as identity(start with 1) not null primary key,
    pid bigint not null,
    parent_id bigint,
    partner varchar(255),
    constraint unique_uk unique(pid, parent_id, partner),
    constraint foreign_fk foreign key (parent_id, partner, pid) references prov(pid, parent_id, partner)
);

内容的提问来源于stack exchange,提问作者Andrei Țocu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:55:23