2015-07-11 3 views
0

Я использую таблицу в PostGres для предоставления разрешения в веб-приложении SpringBoot, которое подключается к базе данных PostGres. Я хочу инициализировать эту таблицу с помощью элемента администрирования по умолчанию, если таблица пуста. Я делаю это внутри schema.sql файла Вот код, который я пытался до сих пор:Инициализация пустой таблицы с использованием schema.sql в Spring Boot

CREATE TABLE IF NOT EXISTS public.jdbcauth 
(
    username VARCHAR(32), 
    password VARCHAR(32) default NULL, 
    role VARCHAR(32) default NULL, 
    enabled INT default 0, 
    PRIMARY KEY(username) 
); 

IF EXISTS (SELECT 1 FROM public.jdbcauth) THEN 
    INSERT public.jdbcauth (username, password, role, enabled) values ('admin', 'admin', 'ADMIN', '1'); 

Это всегда терпит неудачу со следующей ошибкой:

Caused by: org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'dataSourceInitializer': 
Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: 
Failed to execute SQL script statement #2 of resource URL 
[file:/home/balajeerc/Projects/IGVDS_WebApp/src/main/resources/schema.sql]: 
IF EXISTS (SELECT 1 FROM public.jdbcauth) THEN INSERT public.jdbcauth (username, password, role, enabled) values ('admin', 'admin', 'ADMIN', '1'); 
nested exception is org.postgresql.util.PSQLException: 
ERROR: syntax error at or near "IF" 

Что я делаю неправильно?

+0

Заявление SQL скрипт, который по ошибке не то же самое как скрипт, который вы пытаетесь выполнить при инициализации. Ошибка должна исходить из другой части вашего веб-приложения. Проводка кода может помочь. –

+0

@DavidH Извините, ошибка, которую я опубликовала, была тем, что я получал от попытки немного отличаться от кода SQL, который я разместил выше. Я обновил сообщение, чтобы показать фрагмент SQL, который я пытаюсь выполнить с ошибкой, соответствующей этому фрагменту. Сказав это, я уверен, что причиной ошибки являются только те две строки в файле schema.sql. Когда я прокомментирую это, ошибка исчезнет. Извините снова о путанице. – balajeerc

ответ

0

Это, как я, наконец, удалось сделать то, что я хочу:

CREATE TABLE IF NOT EXISTS public.jdbcauth 
(
    username VARCHAR(32), 
    password VARCHAR(32) default NULL, 
    role VARCHAR(32) default NULL, 
    enabled INT default 0, 
    PRIMARY KEY(username) 
); 

INSERT INTO public.jdbcauth (username, password, role, enabled) 
SELECT 'admin', 'admin', 'ADMIN', 1 
WHERE 
NOT EXISTS (
    SELECT username FROM public.jdbcauth WHERE username = 'admin' 
); 
0

Вам не нужен «ТОГДА»?

IF EXISTS (SELECT 1 FROM public.jdbcauth) THEN 
    INSERT public.jdbcauth (username, password, role, enabled) VALUES ('admin', 'admin', 'ADMIN', '1'); 
+0

Нет, я получаю ту же ошибку. Кажется, что-то еще не так. – balajeerc

0

Другой способ сделать это:

DO 
    language plpgsql 
    $$ 
    BEGIN 
     IF NOT EXISTS (SELECT * FROM public.jdbcauth WHERE username <> 'admin') THEN 
      INSERT public.jdbcauth (username, password, role, enabled) VALUES ('admin', 'admin', 'ADMIN', '1'); 
     END IF; 
    END 
    $$ 
Смежные вопросы