如何告诉 HSQLDB 允许为 SERIAL 定义身份?

Posted

技术标签:

【中文标题】如何告诉 HSQLDB 允许为 SERIAL 定义身份?【英文标题】:How to tell HSQLDB to allow identity definition for SERIAL? 【发布时间】:2017-12-06 17:25:59 【问题描述】:

我目前正在为使用 postgreSQL 数据库的 Spring Boot 应用程序编写测试。在测试期间,我想用一些内存变体(如 H2 或 HSQLDB)替换数据库。遗憾的是,两者的行为都与 postgreSQL 数据库不同。

我的迁移看起来像

CREATE TABLE foo(id BIGSERIAL PRIMARY KEY, ...)

这导致 hsqldb 告诉我

SQL State  : 42525
Error Code : -5525
Message    : identity definition not allowed: FOO_ID

显然,为主键创建匹配序列是被禁止的。有没有办法告诉 hsqldb 接受这个?

【问题讨论】:

【参考方案1】:

您需要在 HSQLDB 中设置 PostgreSQL 兼容模式。

SET DATABASE SQL SYNTAX PGS TRUE

然后您的表定义被接受并在内部转换为等效的 SQL 标准。

CREATE TABLE FOO(ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY, ..

【讨论】:

我当然是在连接字符串中设置pg模式。 我检查了我使用 HSQLDB 2.4.0 版给出的示例,它可以工作。

以上是关于如何告诉 HSQLDB 允许为 SERIAL 定义身份?的主要内容,如果未能解决你的问题,请参考以下文章

HSQLDB 2.3.3:如何创建自定义类型?

如何在 HSQLDB 中创建复杂的用户定义类型?

不允许 HSQLDB 参数标记

如何使用注解在 Spring JPA 中定义 HSQLDB 属性

JBOSS + HSQLDB 设置.script

HSQLDB整型key自动递增