无法使用 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脚本。
我正在尝试将一个实体存储在我的 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脚本。