flyway hsql db create tables sql migrate hangs

时间:2016-07-09 07:21:14

标签: sql hsqldb flyway

我正在使用maven执行flyway。 我有一个sql(它有DDL创建表 - DEPARTMENT,EMPLOYEE如下所示) 我运行mvn compile flyway:migrate

这是控制台日志。

......
[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)
)

首次创建表即Department表后执行挂起。 然后我使用ctrl + C杀死我看到schema_version并且仅创建了Department表。

我尝试了其他创建表的方法,即没有ID生成,添加';'最后,在每个CREATE TABLE之后添加GO,但它没有帮助。

使用Squirrel SQL客户端成功运行相同的create table sql。 我正在使用flyway版本4.0.3和hsqldb 2.3.4。 在调试时,可以看到它正在等待来自DB的响应I / O此时完成=>  boolean hasResults = statement.execute(sql);在类org.flywaydb.core.internal.dbsupport.JdbcTemplate

更新

如Fredt所述,使用hsqldb-2.3.3

时未出现此问题

1 个答案:

答案 0 :(得分:4)

此问题特定于HSQLDB 2.3.4,它具有更严格的锁定。您可以将事务模型设置为MVCC以避免此问题。或者使用HSQLDB版本2.3.3。