无法使用text []数据类型创建表

时间:2019-06-14 07:44:27

标签: postgresql spring-data-jpa h2 flyway java-11

我正在尝试在Postgresql数据库中存储一个实体。这个实体里面有一个List,所以我想使用PostgreSQL类型的TEXT []。但是,每次尝试出现SQL错误时,我都不知道为什么。

我确实没有语法错误。我敢肯定这是一个愚蠢的问题,但是您能帮我吗?

谢谢

我尝试了一些替代方法,直接从h2控制台创建它,但是我总是遇到相同的错误

我在flyway中用于创建表格的脚本


CREATE TABLE discrimination(
    id SERIAL PRIMARY KEY NOT NULL ,
    location VARCHAR(255) NOT NULL,
    criteria TEXT[] NOT NULL,
    domain VARCHAR(255) NOT NULL,
    description TEXT NOT NULL,
    name_organ VARCHAR(55) NOT NULL,
    function_disc VARCHAR(55) NOT NULL
);

我的H2和Flyway应用程序配置



h2:
    console:
      enabled: true
      path: /h2
  datasource:
    url: jdbc:h2:mem:formation-iris;MODE=PostgreSQL
    username: test
    password: test
    driver-class-name: org.h2.Driver
  flyway:
    locations: classpath:db/migration
    enabled: true

我得到的错误

Syntax error in SQL statement "CREATE TABLE DISCRIMINATION( 
    ID SERIAL PRIMARY KEY NOT NULL , 
    LOCATION VARCHAR(255) NOT NULL, 
    CRITERIA TEXT[[*]] NOT NULL, 
    DOMAIN VARCHAR(255) NOT NULL, 
    DESCRIPTION TEXT NOT NULL, 
    NAME_ORGAN VARCHAR(55) NOT NULL, 
    FUNCTION_DISC VARCHAR(55) NOT NULL 
) "; expected "(, FOR, UNSIGNED, INVISIBLE, VISIBLE, NOT, NULL, AS, DEFAULT, GENERATED, ON, NOT, NULL, AUTO_INCREMENT, BIGSERIAL, SERIAL, IDENTITY, NULL_TO_DEFAULT, SEQUENCE, SELECTIVITY, COMMENT, CONSTRAINT, PRIMARY, UNIQUE, NOT, NULL, CHECK, REFERENCES, ,, )"; SQL statement:

1 个答案:

答案 0 :(得分:2)

摘自H2文档:

  

兼容模式

     

对于某些功能,此数据库可以模拟   特定数据库的行为。但是,只有一小部分   数据库之间的差异是通过这种方式实现的。

这意味着H2可以模拟某些特定于DB的行为,但不会与所选DB完全兼容。 对于SQL语法尤其如此。 因此,如果要在H2中使用数组,则应使用H2语法ARRAY而不是TEXT[]

这还意味着您将需要用于生产(PostgreSQL)和测试(H2)的单独SQL脚本。幸运的是,flyway支持这一点。它可以从不同的文件夹加载特定于供应商的脚本。以此方式扩展飞行路线配置:

spring.flyway.locations=classpath:db/migration/{vendor}

并分别在/h2/postgresql文件夹下添加供应商特定的SQL脚本。