【问题标题】:H2 SQL Syntax Error `expected "., COMMENT, ("` using Flyway w/ Spring Boot TestH2 SQL 语法错误`expected "., COMMENT, ("` using Flyway w/Spring Boot Test
【发布时间】:2019-11-18 07:01:49
【问题描述】:

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

我做错了什么?

【问题讨论】:

  • 它叫“Flyway”,而不是“Flywheel”。
  • 谢谢@JBNizet,我更正了这个问题。
  • h2 根本不支持USING btree 部分
  • @a_horse_with_no_name 有没有办法在 Flyway 中为不同的数据库指定不同的 SQL?
  • 我不知道 - 我只使用 Liquibase,它可以通过其(DBMS 独立)XML 格式轻松做到这一点

标签: java sql h2 flyway spring-boot-test


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 2015-08-06
    • 2015-03-15
    • 1970-01-01
    • 2015-06-19
    • 2020-09-12
    相关资源
    最近更新 更多