我正在处理一个分支,例如需要删除表X中的一列,我添加了一个更改,它对该特定分支有好处,然后我切换到另一个分支,该分支仍然需要该列,并且该更改需要回滚。db在不同的分支之间有很多变化,比如这样的变化。
我为每个分支添加一个新的changelog xml,并将其包含在主changelog xml中。显然,当我切换到另一个分支时,前一个分支的changlog xml不再在工作区中,并且liquibase不会在数据库中保存实际的变更集,只保存其名称和应用的时间,因此它将无法自动回滚变更。
我正在使用Liquibase Servlet在应用程序启动时应用更改。
Liquibase的专家们,这个问题有没有一个已经实现的简单的解决方案呢?谢谢你!
很难跨代码分支共享单个数据库实例。如果您尝试在多个开发人员之间共享数据库,则会导致同样的问题。
Liquibase被设计为使用基于文件的变更集作为数据库变更的主记录。设计了专用表DATABASECHANGELOG跟踪数据库实例中应用了哪些变更集。在分支之间切换会以许多不可预测的方式引起混乱,例如:
当您在分支之间切换时,最好的建议是刷新或重新同步数据库:
liquibase dropAll
liquibase update
在您的情况下,第二个操作可能是不必要的,因为liquibase servlet将在启动时更新数据库。
如果您担心丢失数据,那么使用上下文来控制测试数据。
mvn -Presync compile
<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>
我正在试用Liquibase,目的是尝试自动化数据库部署,并获得数据库更改的一些结构。 这里是我想评估自动回滚的变更集。现在,我试图在中引入一个错误,并希望在错误发生后运行,它还会从表中删除列。 http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd“> 但是真正发生的是表中没有条目。但表中的列仍然存在。我确实查看了liqui
假设我有一个包含3个变更集的changeLog文件。如果我从命令行运行Liquibase Update命令,但它在第二个变更集上失败,那么Liquibase会回滚到Update命令开始执行之前吗?还是保留变更集1中的变更?
case-0-3.sql: 我在进行任何更改之前标记数据库: 之后,我在每个文件应用后应用文件和标记数据库: 求求你,救命。可能有人在sql或其他格式中使用回滚操作?哪里错了?我做错了什么?它是工作液基功能吗?
case-0-3.sql: I在进行任何更改之前标记数据库: 之后,我应用文件,并在每个文件应用后标记数据库:
我在实体中有以下Id描述: 生成此id的分解指令如下: 此外,我还有一些分解脚本,可以在此表中插入预定义的值,例如。 当我尝试使用Jpa存储库插入没有id的新记录时,问题出现了。我收到了一条类似“重复id”的错误消息。所以,我知道jpa(hibernate)不使用postgresql序列来获取新的id值。我不想在实体的id描述中包含序列名。我希望postgresql本身能够解决这种情况。我不会使用
我的问题是liquibase没有回滚我的一些变更集,这些变更集是在我试图回滚的变更集上设置标签后执行的。 例如,我创建了两个按正常方式执行的变更集(A和B)。然后,我创建了另一个变更集,它将变更集B的标记设置为Release1。并且这个变更集也按预期工作。但是,我随后执行另外5个变更集,所有变更集都使用回滚命令。而且这些也执行得很好。 现在,这个回滚不应该回滚在执行release1标记之后执行的任