我正在尝试在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:
答案 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脚本。