异步执行长时间运行的liquibase数据库更新

时间:2017-09-18 13:15:13

标签: java postgresql asynchronous liquibase

我们正在使用liquibase来管理应用程序底层关系数据库结构的变化。作为数据库后端,我们使用的是PostgreSQL。

现在有数百万个条目的表,我们需要为其中一些大表添加索引。由于表的大小,索引创建需要相当长的时间。这会阻止应用程序启动,因为liquibase更改集在应用程序的启动阶段执行,以确保在应用程序实际运行之前可以使用正确的持久性后端。

虽然由于显而易见的原因需要在应用程序启动之前进行结构更改,但是在应用程序运行时可以添加索引。因此我的问题是:

有没有办法用liquibase异步执行索引创建?

我们已尝试使用CONCURRENT option provided by PostgreSQL。这有助于在应用程序运行时创建索引,因为索引创建不会锁定相应的表。但是,在执行下一个变更集之前,各个liquibase变更集仍将等待索引创建完成。

1 个答案:

答案 0 :(得分:0)

这不是直接可行的,但你可以解决这个问题:

在运行liquibase之前,您需要手动运行索引创建。 (这将允许您使用"同时"选项)。

为了记录更改,您可以添加索引创建脚本(不带"并发"选项),并使用onFail =" MARK_RAN" liquibase。

下次运行liquibase时,它会将变更集标记为运行。