Не могу создать таблицу с типом данных text [] - PullRequest
3 голосов
/ 14 июня 2019

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

1 Ответ

2 голосов
/ 14 июня 2019

Из документации H2:

Режимы совместимости

Для определенных функций эта база данных может эмулировать поведение определенных баз данных.Однако таким образом реализовано лишь небольшое подмножество различий между базами данных.

Это означает, что H2 может эмулировать определенные специфичные для БД поведения, но не будет полностью совместим с выбранной БД.,Это особенно верно для синтаксиса SQL.Итак, если вы хотите использовать массивы в H2, то вам следует использовать синтаксис H2 ARRAY вместо TEXT[]

. Это также означает, что вам потребуется отдельный сценарий SQL для производства (PostgreSQL) и длятесты (H2).К счастью, пролетный путь поддерживает это.Он может загружать специфичные для поставщика скрипты из разных папокРасширьте конфигурацию пролетного пути следующим образом:

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

и добавьте специфичные для поставщика сценарии SQL в папки /h2 и /postgresql соответственно.

...