【问题标题】:Can't create table with text[] data type无法使用 text[] 数据类型创建表
【发布时间】:2019-10-28 19:48:14
【问题描述】:

我正在尝试在我的 postgresql 数据库中存储一个实体。这个实体有一个列表,所以我想使用 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:

【问题讨论】:

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


    【解决方案1】:

    来自 H2 文档:

    兼容模式

    对于某些功能,此数据库可以模拟 特定数据库的行为。然而,只有一小部分 数据库之间的差异都是这样实现的。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 2014-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-31
      • 2012-08-16
      相关资源
      最近更新 更多