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

Can't create table with text[] data type

我正在尝试将一个实体存储在我的 postgresql 数据库中。这个实体里面有一个列表,所以我想使用 postgresql 类型 TEXT[]。但每次我尝试时都会收到 SQL 错误,我不知道为什么。

我真的没有遇到语法错误。我确定这是一个愚蠢的问题,但你能帮我吗?

谢谢

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

我使用 flyway 创建 table

的脚本

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:

来自 H2 文档:

Compatibility Modes

For certain features, this database can emulate the behavior of specific databases. However, only a small subset of the differences between databases are implemented in this way.

这意味着 H2 可以模拟某些 DB-specific 行为,但它不会与所选数据库完全兼容。 SQL 语法尤其如此。 所以,如果你想在 H2 中使用数组,那么你应该使用 H2 语法 ARRAY 而不是 TEXT[]

这也意味着您将需要一个单独的 SQL 脚本用于生产 (PostgreSQL) 和测试 (H2)。幸运的是,flyway 支持这一点。它可以从不同的文件夹加载 vendor-specific 脚本。以这种方式扩展飞路配置:

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

并分别在/h2/postgresql文件夹下添加vendor-specificSQL脚本。