flyway hsql db create tables sql migrate hangs



我正在使用maven执行flyway。我有一个sql(它有DDL创建表-部门,员工如下图所示)我跑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)
)

执行在第一次创建表(即部门表)后挂起。然后我使用 ctrl+C 杀死,我看到schema_version并且单独创建了部门表。

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

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

更新:

正如Fredt所提到的,使用hsqldb-2.3.3时不会出现此问题

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

最新更新