【发布时间】:2018-02-27 01:08:18
【问题描述】:
我们正在使用 liquibase 来管理应用程序底层关系数据库结构的变化。我们使用 PostgreSQL 作为数据库后端。
现在有数百万个条目的表,我们需要为其中一些大表添加索引。由于表的大小,索引创建需要相当长的时间。这会阻止应用程序启动,因为 liquibase 变更集是在应用程序的启动阶段执行的,以确保在应用程序实际运行之前可以使用适当的持久性后端。
虽然出于显而易见的原因需要在应用程序启动之前进行结构更改,但可以在应用程序已经运行时添加索引。因此我的问题是:
有没有办法使用 liquibase 异步执行索引创建?
我们已经尝试使用CONCURRENT option provided by PostgreSQL。这有助于在应用程序运行时创建索引,因为相应的表不会被索引创建锁定。但相应的 liquibase 变更集仍将等待索引创建完成,然后再执行下一个变更集。
【问题讨论】:
-
我认为在 liquibase 中没有这样的机制。异步运行任何东西都意味着在以后的某个时间点以某种方式同步它(比如在索引创建完成时有一个回调)。 Liquibase 正在跟踪所有更改和日志,无论它们是否成功应用于数据库。也可以使用结果来控制进一步的执行,例如“当变更集 x 不成功时停止整个更新”。如果某些东西异步运行,这是不可能的。我并不是说这根本不可能,我只是认为这目前还没有在 liquibase 中实现......
-
这个@dpr 运气好吗?
标签: java postgresql asynchronous liquibase