2016-07-09 4 views
1

Я выполняю пролет с использованием maven. У меня есть SQL (Это DDL создания таблиц - ДЕПАРТАМЕНТ, employee, как показано ниже) Я бегу mvn compile flyway:migrateflyway hsql db create tables sql migrate hangs

Вот лог консоли.

...... 
[INFO] Successfully validated 3 migrations (execution time 00:00.097s) 
[DEBUG] Schema "PUBLIC" already exists. Skipping schema creation. 
[DEBUG] Locking table "PUBLIC"."schema_version"... 
[DEBUG] Lock acquired for table "PUBLIC"."schema_version" 
[INFO] Current version of schema "PUBLIC": 1 
[INFO] Migrating schema "PUBLIC" to version 1.1 - department 
[DEBUG] Found statement at line 2: CREATE TABLE Department (
ID INTEGER GENERATED ALWAYS AS IDENTITY(START WITH 1) PRIMARY KEY, 
NAME VARCHAR(32) NOT NULL , 
DESCRIPTION VARCHAR(100) 
) 
[DEBUG] Found statement at line 8: CREATE TABLE EMPLOYEE (
ID INTEGER GENERATED ALWAYS AS IDENTITY(START WITH 1) PRIMARY KEY , 
NAME VARCHAR(100) NOT NULL , 
DEPARTMENTID INTEGER FOREIGN KEY REFERENCES PUBLIC.DEPARTMENT(ID) 
) 
[DEBUG] Executing SQL: CREATE TABLE Department (
ID INTEGER GENERATED ALWAYS AS IDENTITY(START WITH 1) PRIMARY KEY, 
NAME VARCHAR(32) NOT NULL , 
DESCRIPTION VARCHAR(100) 
) 

Выполнение висит после первого создания таблицы i.e Таблица отделов. Затем я убиваю, используя ctrl + C. Я вижу, что schema_version и таблица отдела создаются.

Я пробовал другие способы создания таблицы i.e без создания идентификатора, добавляя ';' в конце, добавив GO после каждого CREATE TABLE, но это не помогло.

Такая же таблица создания таблицы выполняется успешно, используя Squirrel SQL client. Я использую пролетную версию 4.0.3 и hsqldb 2.3.4. При отладке видно, что он ожидает ответа ввода-вывода от БД для завершения в этой точке => boolean hasResults = statement.execute (sql); в классе org.flywaydb.core.internal.dbsupport.JdbcTemplate

UPDATE:

Как отметил Fredt, этот вопрос не рассматривается при использовании HSQLDB-2.3.3

ответ

4

Этот вопрос специфичный для HSQLDB 2.3.4, который имеет более строгую блокировку. Модель транзакции можно настроить для MVCC, чтобы избежать проблемы. В качестве альтернативы используйте HSQLDB версии 2.3.3.

+0

Как это установить. Я попытался указать URL-адрес jdbc в свойствах пролета таким образом: jdbc: hsqldb: file: db1; hsqldb.tx = mvcc ИЛИ jdbc: hsqldb: hsql: // localhost/db1; hsqldb.tx = mvcc, но я не вижу разница. Я использовал тот же url в squirrel client для входа в систему и после входа в метаданные - свойства клиента. Я все еще вижу hsqldb.tx как LOCKS, а не MVCC. – Inv3r53

+0

И да, я не вижу этих проблем с 2.3.3. Временно я мог бы использовать это, однако мне нужно заставить это работать с 2.3.4. В моем случае fly way, похоже, запускает sql, поэтому я пытаюсь выяснить, как я могу это сделать либо на уровне сервера, либо на уровне базы данных. Также с 2.3.3, когда я проверяю клиента с белками, свойства метаинформации клиента все еще видят, что hsqldb.tx является LOCKS и здесь нет проблем – Inv3r53

+0

См. Руководство по HSQLDB на серверах. Вам нужно добавить «hsqldb.tx = mvcc» или любые другие свойства в путь к файлам базы данных в свойствах сервера. – fredt

Смежные вопросы