【发布时间】:2016-11-11 18:36:49
【问题描述】:
我正在使用 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)
)
第一次创建表即部门表后执行挂起。 然后我使用 ctrl+C 杀死我看到 schema_version 和 Department 表单独被创建。
我尝试了其他创建表的方法,即没有 ID 生成,添加 ';'最后,在每个 CREATE TABLE 之后添加 GO,但它没有帮助。
同样的创建表 sql 使用 Squirrel 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 时不会出现此问题
【问题讨论】: