postgresql 兼容性中的语法错误 h2 数据库

Syntax error h2 database in postgresql compatibility

当在 h2 数据库(兼容性 POSTGRESQL)中执行以下代码片段时,我遇到了似乎由 h2 报告的语法错误:

org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "
                                                                      
             
                                                                      

ALTER TABLE ACTIVITIES
    ADD CONSTRAINT FK_ACT_NEXACTID FOREIGN KEY (NEXTACTIVITYID)
    REFERENCES ACTIVITIES (ID)
    DEFERRABLE INITIALLY[*] DEFERRED
 "; SQL statement:

----------------------------------------------------------------------
-- ACTIVITIES
----------------------------------------------------------------------

ALTER TABLE ACTIVITIES
    ADD CONSTRAINT FK_ACT_NEXACTID FOREIGN KEY (NEXTACTIVITYID)
    REFERENCES ACTIVITIES (ID)
    DEFERRABLE INITIALLY DEFERRED
 [42000-198]

SQL状态为42000,是语法错误的代码。当我在本机 postgre 服务器上执行它时,它运行时没有错误。任何帮助表示赞赏。我在这里读到 H2 - (Quite) long INSERT failing with error 42000 一些额外的字符可能是造成这种情况的原因,但我没有看到。谢谢!

您正在使用 PostgreSQL 和其他一些 DMBS 支持的特定于供应商的语法。 H2 的兼容模式仅提供与其他模式非常有限的兼容性。您应该使用与生产中相同的 DBMS 来测试您的应用程序,尤其是当您想要使用某些特定于供应商的功能时。

如果出于某种原因您确实需要在此处使用 H2,则在使用 H2 时需要从命令中删除 DEFERRABLE INITIALLY DEFERRED 并且您的应用程序显然必须能够使用常规约束,因为 H2不支持延迟的。另外 1.4.198 是 H2 的 beta 质量版本,没有充分的理由你不应该使用它,但现在的版本也不支持延迟约束。