【问题标题】:SQL Error Status: 90057 org.h2.jdbc.JdbcSQLSyntaxErrorException: Constraint "PRIMARY KEY | UNIQUE (PID, PARTNER)" not foundSQL 错误状态:90057 org.h2.jdbc.JdbcSQLSyntaxErrorException:未找到约束 \"PRIMARY KEY | UNIQUE (PID, PARTNER)\"
【发布时间】:2022-12-09 10:37:56
【问题描述】:

我刚刚将 h2database 从 1.4.197 升级到 2.1.212,现在我收到一条关于我在运行测试时创建的表之一的错误消息。

错误:

org.h2.jdbc.JdbcSQLSyntaxErrorException: Constraint "PRIMARY KEY | UNIQUE (PID, PARTNER)" not found; SQL statement: ... [90057-212]

状态码:90057

文件:

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) references prov(pid, partner)
);

在将 h2 数据库升级到 v2.1.212 之前,此 SQL 文件可以正常工作。 查询应该更改什么?

我从错误中搜索了状态代码,似乎在尝试删除约束时抛出此错误。但我不太确定我是否真的放弃了任何限制。我唯一要删除的是表提供程序(如果存在)。

我对 H2 数据库不是很熟悉。

【问题讨论】:

    标签: h2


    【解决方案1】:

    H2 数据库没有什么特别的,每个理智的数据库系统都应该拒绝这个定义,但是旧版本的 H2 和一些其他数据库系统的限制较少。

    引用约束需要引用列上的主键或唯一约束。您已经对 (pid, parent_id, partner) 列具有唯一约束,但您的引用约束 foreign_fk 仅引用 (pid, partner),因此您的表定义有问题。

    您很可能需要对 (pid, partner) 进行额外的唯一约束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多