当前位置: 首页 > 知识库问答 >
问题:

LiquiBase-TagDatabase变更集也使用标记更新以前的变更集

魏鸿禧
2023-03-14

我想在changelog文件中使用以下变更集标记数据库,以便将来回滚。当我应用这个变更集时,我在databasechangelog中注意到,前面的变更集也用标记更新了。

changelog文件中的变更集

`<changeSet author="Major Version" id="2.0"> 
 <tagDatabase tag="version_2.0"/>
 </changeSet> `

下面是从databasechangelog表中提取的内容,function51是上一次运行的变更集

===>函数51 sr./db-changelog.xml 05-apr-14 12.34.46.975900000 15已执行7:5616F4ADBA7690FAFD882B3A607C3ECA sqlFile**version_2.0**3.1.1

`===>2.0 ||    Major Version  ||   ./db-ApplyTag.xml ||    05-APR-14 12.37.24.140637000    || 16 ||    EXECUTED  ||   7:97fe9eb435a72fdfbe27647efa5be97d  ||   tagDatabase       ||  **version_2.0** ||    3.1.1`

有人遇到过吗?我使用的是Liquibase 3.1.1

多谢了。

共有1个答案

蔚和风
2023-03-14

原因是当Liquibase运行时,变更集中的逻辑将运行,然后在databasechangelog表中将其标记为ran。因此,在tagDatabase的情况下,最后运行的变更集是先前执行的变更集。

回滚逻辑对您来说仍然可以正常工作,因为回滚到Version2.0将使您返回到function51,这是执行的最后一个变更集。再次运行update会将其重新标记为version_2.

 类似资料:
  • 我们使用liquibase对数据库进行源代码控制。最初,我们从Postgres开始,创建了数据类型为特定于Postgres的列的变更集。 例如,我们有一个变更集,它创建了具有“JSON”类型字段的表。现在,我们想转移到其他数据库。因此,当我们针对另一个数据库运行变更集时,它无法创建表。我尝试添加“failOnError=false”。但是,后面的变更集失败,因为该表不存在。 您能建议如何重构旧的变

  • 我正在尝试标记一个格式化的SQL变更集,以便将匹配的ID和标记写入DATABASECHANGELOG表(为了回滚的目的,请参见下面的变更集片段)。Phing liquibase任务用于为单个更改日志应用“update”命令。 多谢你, IR8 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  • 我在酗酒方面遇到了麻烦。出于某种原因(我没有更改任何现有的变更集或其他东西),它试图应用已经在base中的变更集。所以我得到了一些错误,比如“关系”表“已经存在”。 我找到了这个标签-

  • 我已经用Spring试用过LiquiBase3.0测试版了(顺便说一句,它不适合2.0)。很顺利。 现在,我正在用Ant和相同的数据库和changelog测试它,在回滚所有更改并删除表DATABASECHANGELOG和DatabaseChangeloglock之后。 问题是liquibase将所有更改集记录在表DATABASECHANGELOG中,这意味着我的配置中没有任何错误,但它没有将更改提

  • LiquiBase:CVC-complex-type.2.4.A:发现以元素'sql'开始的无效内容。应使用“{”http://www.liquibase.org/xml/ns/dbchangelog“:modifysql}”之一。 获取此变更集的错误

  • 我有一个简单的liquibase变更集(下面),我正在尝试测试它。 这是应用程序启动后运行的第二个更改日志。 我故意编写了一个错误代码,其中我尝试创建列“new_2”两次,以强制回滚变更集中的所有条目:ADD_COL_2 然而,即使生成了回滚文件,并且我看到: 信息4/13/16 12:17 AM:LiquiBase:classpath:db/changelog/db.changelog-mult