java - H2 SQL 语法错误 `expected "., COMMENT, ("` using Flyway with/Spring Boot Test

标签 java sql h2 flyway spring-boot-test

我在 Postgres 数据库上使用带有 Data JPA 和 Flyway 的 Spring Boot 2。在生产中一切正常。现在我正在尝试编写将在 H2 嵌入式数据库上运行以进行测试的测试。但是,测试遇到 SQL 语法错误。但是,我不明白语法有什么问题:

CREATE TABLE mysite_user (
    id int8 NOT NULL,
    thirdparty_user_id varchar(255) NULL,
    email varchar(255) NULL,
    first_name varchar(255) NULL,
    PRIMARY KEY (id)
);
CREATE INDEX mysite_user_thirdparty_user_id_idx ON mysite_user USING btree (thirdparty_user_id) ;

这是错误:
Migration V1__Initial.sql failed
--------------------------------
SQL State  : 42001
Error Code : 42001
Message    : Syntax error in SQL statement "CREATE INDEX MYSITE_USER_THIRDPARTY_USER_ID_IDX ON MYSITE_USER USING[*] BTREE (THIRDPARTY_USER_ID) "; expected "., COMMENT, ("; SQL statement:
CREATE INDEX mysite_user_thirdparty_user_id_idx ON mysite_user USING btree (thirdparty_user_id) [42001-199]
Location   : db/migration/V1__Initial.sql (/Users/me/Development/mysite-website/target/classes/db/migration/V1__Initial.sql)
Line       : 20
Statement  : CREATE INDEX mysite_user_thirdparty_user_id_idx ON mysite_user USING btree (thirdparty_user_id)

我究竟做错了什么?

最佳答案

可以说,您做错的是在生产和测试之间使用不同的数据库。正如您所看到的,您的测试最终必须围绕数据库之间的差异进行编码,并且可能会忽略在一个数据库中而不是另一个数据库中工作的微妙边缘情况。

如果您想沿着这条路线走下去是可能的 - 见 Best way for "database specific" sql scripts with Flyway

关于java - H2 SQL 语法错误 `expected "., COMMENT, ("` using Flyway with/Spring Boot Test,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56940412/

相关文章:

使用 'java' 编译类时,Java 11 不会生成 .class 文件

sql - 数据库内的地址标准化

sql - OpenEdge 进度数据库导出

java - hibernate 错误: Method too large (exceeding 65535 bytes size)

spring - 如何在Spring Integration测试之间删除内存中的h2db?

java - 将字符串与数组列表进行比较

java - 有效Java : should I override equals() and hashCode() if the objects I'm creating are never compared with each other?

Java - USB 弹出后应用程序是否仍然运行

mysql - 使用 bash 更新 mysql 列

java - 是否可以使用通配符创建路由?