如果一个changeSet未能应用,如何回滚databaseChangeLog中的所有changeSet?

问题描述 投票:0回答:1

我已经使用以下属性配置了Liquibase和spring-boot:

  • Spring-Boot
    spring:
      liquibase:
        change-log: classpath:/db/changelog/db.changelog-master.yml
        enabled: true
  • db.changelog-master.yml
databaseChangeLog:
 - include:
      file: db/changelog/release-01/master.yml
 - include:
      file: db/changelog/release-02/master.yml
  • release-02 / master.yml
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

Acceptance:如果任何脚本无法在release-02中应用,则该changeSet中的所有release-02/master.yml应该回滚。

当前:如果02__t_group_table.sql下降,则仅回退组脚本,但不回退用户脚本。

我想要这样一种解决方案,如果将登台环境应用程序升级到生产环境,并且在生产环境上进行Liquibase迁移期间发生某些故障,那么该发行版中的changeSet都不适用。

java database spring-boot liquibase
1个回答
0
投票
对于您的release-02/master.yml脚本,如果要回滚changeLog“ release-02 / master.yaml中的所有changeSet,那么我认为最好只包含一个包含tagDatabase rollback标记的changeSet(第一个)您打算回滚端点。然后在以下包含相同标签的changeSet中删除其他tagDatabase属性。

请考虑以下示例:

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

要对此变更日志进行回滚,您可以简单地运行:对于Liquibase Maven插件命令:

mvn liquibase:rollback -Dliquibase.rollbackTag=0.0.2

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

liquibase rollback 0.0.2

© www.soinside.com 2019 - 2024. All rights reserved.