首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果没有应用“`changeSet`”,如何回滚数据库内的所有“`changeSet`”?

如果没有应用“`changeSet`”,如何回滚数据库内的所有“`changeSet`”?
EN

Stack Overflow用户
提问于 2020-05-24 07:23:28
回答 1查看 2.3K关注 0票数 0

我使用以下属性配置了Liquibase和spring引导:

  • Spring-Boot

代码语言:javascript
复制
    spring:
      liquibase:
        change-log: classpath:/db/changelog/db.changelog-master.yml
        enabled: true

  • db.changelog-master.yml

代码语言:javascript
复制
databaseChangeLog:
 - include:
      file: db/changelog/release-01/master.yml
 - include:
      file: db/changelog/release-02/master.yml

  • release-02/master.yml

代码语言:javascript
复制
databaseChangeLog:
  - changeSet:
      id: 1
      author: Prabal Srivastava
      logicalFilePath: release-02-01__t_user_table.sql
      context: User
      labels: InitialCommit
      comment: Initial changes for user table
      changes:
        - sqlFile:
            path: 01__t_user_table.sql
            relativeToChangelogFile: true
        - tagDatabase:
            tag: 0.0.2
      rollback:
        - sqlFile:
            path: rollback/01__t_user_table.sql
            relativeToChangelogFile: true
  - changeSet:
      id: 2
      author: Prabal Srivastava
      logicalFilePath: release-02-02__t_group_table.sql
      context: Entry
      labels: InitialCommit
      comment: Initial changes for group table
      changes:
        - sqlFile:
            path: 02__t_group_table.sql
            relativeToChangelogFile: true
        - tagDatabase:
            tag: 0.0.2
      rollback:
        - sqlFile:
            path: rollback/02__t_group_table.sql
            relativeToChangelogFile: true

接受:如果没有在release-02中应用任何脚本,那么这个release-02/master.yml中的所有changeSet都应该回滚。

当前:,如果02__t_group_table.sql下降,那么只有组脚本正在回滚,但是用户脚本不会回滚。

我想要的解决方案是,如果将暂存环境应用程序升级到生产环境,并且在生产时进行Liquibase迁移时,某些东西会失败,那么该版本中的任何changeSet都不适用。

EN

回答 1

Stack Overflow用户

发布于 2020-05-26 20:55:32

对于您的release-02/master.yml脚本,如果您想回滚changeLog中的所有changeSets“Release-02/ better .yaml”,那么我认为最好只有一个changeSet (第一个changeSet),其中包含要回滚结束点的tagDatabase回滚标记。然后在下面的changeSets中删除包含相同标记的其他tagDatabase属性。

请考虑以下例子:

代码语言:javascript
复制
databaseChangeLog:
  - changeSet:  
      id: release-0.0.2 
      author: Prabal Srivastava  
      changes:  
        -  tagDatabase:  
             tag: 0.0.2
  - changeSet:
      id: 1
      author: Prabal Srivastava
      logicalFilePath: release-02-01__t_user_table.sql
      context: User
      labels: InitialCommit
      comment: Initial changes for user table
      changes:
        - sqlFile:
            path: 01__t_user_table.sql
            relativeToChangelogFile: true
      rollback:
        - sqlFile:
            path: rollback/01__t_user_table.sql
            relativeToChangelogFile: true
  - changeSet:
      id: 2
      author: Prabal Srivastava
      logicalFilePath: release-02-02__t_group_table.sql
      context: Entry
      labels: InitialCommit
      comment: Initial changes for group table
      changes:
        - sqlFile:
            path: 02__t_group_table.sql
            relativeToChangelogFile: true
      rollback:
        - sqlFile:
            path: rollback/02__t_group_table.sql
            relativeToChangelogFile: true

要在这个changeLog上运行回滚,只需运行:对于Liquibase插件命令:

代码语言:javascript
复制
mvn liquibase:rollback -Dliquibase.rollbackTag=0.0.2

对于Liquibase CLI命令,可以运行:

代码语言:javascript
复制
liquibase rollback 0.0.2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61982820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档