Я пытаюсь сохранить объект в своей базе данных 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:





Из документации 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 может эмулировать определенное поведение, характерное для БД, но не будет полностью совместим с выбранной БД.
Это особенно верно для синтаксиса SQL.
Итак, если вы хотите использовать массивы в H2, вам следует использовать синтаксис H2 ARRAY вместо TEXT[]
Это также означает, что вам понадобится отдельный сценарий SQL для производства (PostgreSQL) и для тестов (H2). К счастью, flyway поддерживает это. Он может загружать сценарии конкретного поставщика из разных папок. Расширьте конфигурацию пролетного пути следующим образом:
spring.flyway.locations=classpath:db/migration/{vendor}
и добавьте сценарии SQL для конкретного поставщика в папки /h2 и /postgresql соответственно.