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

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

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

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

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


当您开始在现有系统上使用liquibase并使用现有模式时,基本上有两种选择:

  • 假设所有数据库都将从已知的起点开始。 在liquibase之外做任何你需要的事情,让他们达到这一点(从快照恢复,手动构建等)

  • 使用liquibase generateChangeLog命令为现有数据库创建changeSet。 你只需要在新的数据库上运行它,所以你可以通过自定义的liquibase spring集成调用来控制它,或者使用<preConditions onFail="MARK_RAN"><not><tableExists tableName="table name here"/></not></preConditions>将生成的changeLog折叠为一个<preConditions onFail="MARK_RAN"><not><tableExists tableName="table name here"/></not></preConditions>块在开始。


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

    那么,如你所说,

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

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

    有没有可能与Liquibase做到这一点,或有任何技巧可以使这个工作?

    是的,应该可以没有任何窍门。

    链接地址: http://www.djcxy.com/p/62321.html

    上一篇: Liquibase database migration with empty and preexisting database

    下一篇: Designing a full database migration stack