flyway hsql db创建表sql迁移挂起

flyway hsql db创建表sql迁移挂起,sql,hsqldb,flyway,Sql,Hsqldb,Flyway,我正在使用maven执行flyway。 我有一个sql(它有DDL创建表-部门,员工,如下所示) 我运行mvn编译flyway:migrate 这是控制台日志 ...... [INFO] Successfully validated 3 migrations (execution time 00:00.097s) [DEBUG] Schema "PUBLIC" already exists. Skipping schema creation. [DEBUG] Locking table "PUB

我正在使用maven执行flyway。 我有一个sql(它有DDL创建表-部门,员工,如下所示) 我运行
mvn编译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_版本和Department表

我尝试了其他创建表的方法,即不生成ID,添加“;”最后,在每个创建表之后添加GO,但没有任何帮助

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

更新:


如Fredt所述,在使用hsqldb-2.3.3时未发现此问题。此问题特定于具有更严格锁定的hsqldb 2.3.4。您可以将事务模型设置为MVCC以避免该问题。或者使用HSQLDB版本2.3.3。

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

如何设置此选项。我尝试过用以下方式在flyway属性中指定JDBCURL:jdbc:hsqldb:file:db1;tx=mvcc或jdbc:hsqldb:hsql://localhost/db1;tx=mvcc,但我看不出有什么区别。我在squirrel客户端中使用了相同的url进行登录,在登录元数据-客户端属性后,我仍然将hsqldb.tx视为锁,而不是MVCC。是的,我在2.3.3中没有看到这个问题。暂时我可以使用它,但是我需要让它与2.3.4一起工作。在我的例子中,fly way似乎在运行sql,所以我试图找出如何在服务器或数据库级别执行此操作。同样在2.3.3中,当我签入squirrel客户端时,meta info-客户端属性我仍然看到hsqldb.tx是锁,没有任何问题,请参阅服务器上的hsqldb指南。您需要将
hsqldb.tx=mvcc
或任何其他属性附加到服务器属性中的数据库文件路径。据我所知,设置
hsqldb.tx=mvcc
没有帮助。此外,当2.3.3(在默认配置下工作)配置为使用MVCC时,它也会挂起。我在GitHub上分享了一个重现问题的示例和我的发现摘要:我可以成功地使用MVCC事务运行HSQLDB,但在Flyway迁移期间,通过使用Flyway在迁移前和迁移后回调,将模型更改为锁定(它仅适用于锁定,但我的应用程序需要MVCC),请参阅我的答案。我如何设置此选项。我尝试过用以下方式在flyway属性中指定JDBCURL:jdbc:hsqldb:file:db1;tx=mvcc或jdbc:hsqldb:hsql://localhost/db1;tx=mvcc,但我看不出有什么区别。我在squirrel客户端中使用了相同的url进行登录,在登录元数据-客户端属性后,我仍然将hsqldb.tx视为锁,而不是MVCC。是的,我在2.3.3中没有看到这个问题。暂时我可以使用它,但是我需要让它与2.3.4一起工作。在我的例子中,fly way似乎在运行sql,所以我试图找出如何在服务器或数据库级别执行此操作。同样在2.3.3中,当我签入squirrel客户端时,meta info-客户端属性我仍然看到hsqldb.tx是锁,没有任何问题,请参阅服务器上的hsqldb指南。您需要将
hsqldb.tx=mvcc
或任何其他属性附加到服务器属性中的数据库文件路径。据我所知,设置
hsqldb.tx=mvcc
没有帮助。此外,当2.3.3(在默认配置下工作)配置为使用MVCC时,它也会挂起。我在GitHub上分享了一个重现这个问题的示例和我的发现摘要:我可以成功地使用MVCC事务运行HSQLDB,但在Flyway迁移过程中通过使用Flyway在迁移前和迁移后的回调将模型更改为锁定(它仅适用于锁定,但我的应用程序需要MVCC),请参见我的答案。