我正在使用 Spring、JPA/Hibernate 和 MS SQL Server/PostgreSQL 开发 Java Web 应用程序。为了使已安装系统的数据库迁移更容易,我想集成 Liquibase 以在应用程序启动时自动进行更新。目前,我总是创建更新脚本,必须以正确的顺序手动执行这些脚本。
我测试了与 Spring 的集成,并且很快就可以运行。 Liquibase 的元表是使用第一个变更集创建的,并执行更改。问题是已经存在一些已安装的系统,但将来可能还会有其他安装。
Liquibase 是否可以在新安装的系统中检测数据库是否为空并自动执行 DDL?否则我将不得不手动执行 DDL 并启动应用程序。
我想要的是数据库在为空时自动初始化,或者如果数据库已存在则自动更新。有没有可能用 Liquibase 做到这一点,或者有什么技巧可以让它工作吗?
最佳答案
当您开始在具有现有架构的现有系统上使用 liquibase 时,基本上有两种选择:
假设所有数据库都将从已知的起点开始。在 liquibase 之外做任何你需要做的事情来让它们达到这一点(从快照恢复、手动构建等)
使用 liquibasegenerateChangeLog 命令为现有数据库创建变更集。您只想在新数据库上运行它,因此您可以通过自定义 liquibase spring 集成调用来控制它,或者使用
<preConditions onFail="MARK_RAN"><not><tableExists tableName="table name here"/></not></preConditions>
将生成的变更日志折叠为一个变更集。在开始处阻塞。
关于database-migration - 使用空数据库和预先存在的数据库进行 Liquibase 数据库迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9602167/