使用空数据库和预先存在的数据库进行Liquibase数据库迁移

时间:2012-03-07 13:12:00

标签: database-migration liquibase

我正在使用Spring,JPA / Hibernate和MS SQL Server / PostgreSQL开发Java Web应用程序。为了使已安装系统的数据库迁移更容易,我希望在应用程序启动时集成Liquibase以自动执行更新。目前我总是创建更新脚本,我必须以正确的顺序手动执行。

我测试了与Spring的集成,我很快就完成了它。 Liquibase的元表正在使用第一个变更集创建,并执行更改。问题是已经存在一些已安装的系统,但未来可能会有其他安装。

是否可以使用Liquibase检测数据库是否为空并在新安装的系统中自动执行DDL?否则我将不得不手动执行DDL而不是启动应用程序。

我想要的是数据库在空时自动初始化,如果已经存在则会更新。有可能用Liquibase做到这一点,还是有任何技巧可以使这个工作?

2 个答案:

答案 0 :(得分:3)

当您开始在具有现有架构的现有系统上使用liquibase时,基本上有两个选项:

  1. 假设所有数据库都将从已知的起始点开始。在liquibase之外做任何你需要的东西来实现它们(从快照恢复,手动构建等)

  2. 使用liquibase generateChangeLog命令为现有数据库创建changeSet。您只想在新数据库上运行它,因此您可以使用自定义liquibase spring集合调用来控制它,或者将生成的changeLog向下折叠到一个带有<preConditions onFail="MARK_RAN"><not><tableExists tableName="table name here"/></not></preConditions>块的changeSet。

答案 1 :(得分:0)

  

Liquibase是否可以检测数据库是否为空并在新安装的系统中自动执行DDL?

好吧,如你所说,

  

利用第一个变更集创建Liquibase的元表,并执行更改。

所以如果您的DDL语句属于变更集(可能是第一个变更集),那么一切都应该没问题。

  

使用Liquibase是否有可能做到这一点,还是有任何技巧可以让它发挥作用?

是的,应该没有任何技巧。