我在 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/