Liquibase 自动回滚



我正在处理一个分支,例如需要删除表 X 中的一列,我添加一个更改及其对该特定分支的好处,然后我切换到另一个仍然需要该列并且该更改需要回滚的分支。 数据库有很多变化,例如从分支到分支。

我为每个分支添加了一个新的更改日志 xml,并将其包含在主更改日志 xml 中。 显然,当我切换到另一个分支时,前一个分支的 changlog xml 不再在工作区中,并且 liquibase 不会将实际的变更集保存在数据库中,仅保存其名称和应用时间,因此它将无法自动回滚更改。

我正在使用 Liquibase Servlet 在应用程序启动时应用更改。

Liquibase专家,有没有一个简单的解决方案已经实施过这个问题? 谢谢!

很难在代码的分支之间共享单个数据库实例。如果您尝试在多个开发人员之间共享数据库,则会导致相同的问题。

Liquibase 旨在使用基于文件的变更集作为数据库更改的主记录。特殊表 DATABASECHANGELOG 用于跟踪哪些变更集已应用于数据库实例。在分支之间切换会导致许多不可预测的方式混淆,例如:

  • 缺少变更集
  • 内容已更改的变更集(导致校验和错误)。

最好的建议是在分支之间切换时刷新或重新同步数据库:

liquibase dropAll
liquibase update

在您的情况下,第二个操作可能是不必要的,因为 liquibase servlet 会在启动时更新数据库。

如果您担心丢失数据,请使用上下文来控制测试数据。

更新

如果您使用的是 Maven,

则可以从 Maven 调用此"重新同步"操作,如下所示:

mvn -Presync compile

此配置文件在 POM 中配置如下:

    <profile>
        <id>resync</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.liquibase</groupId>
                    <artifactId>liquibase-maven-plugin</artifactId>
                    <version>${liquibase.plugin.version}</version>
                    <executions>
                        <execution>
                            <phase>process-resources</phase>
                            <configuration>
                                <url>${liquibase.url}</url>
                                <driver>${liquibase.driver}</driver>
                                <username>${liquibase.username}</username>
                                <password>${liquibase.password}</password>
                                <changeLogFile>${liquibase.changeLogFile}</changeLogFile>
                                <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
                            </configuration>
                            <goals>
                                <goal>dropAll</goal>
                                <goal>update</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>

相关内容

  • 没有找到相关文章

最新更新