What all the steps Liquibase follows while rolling back?

后端 未结 2 633
别跟我提以往
别跟我提以往 2021-01-26 07:17

I don\'t understand the detailed steps when rolling back using Liquibase.

I had scenario like 6 changesets and for one changeSet rollback was not defined - that is, on

相关标签:
2条回答
  • 2021-01-26 08:00

    When running rollback, liquibase finds the changeSets to roll back, and then checks for a <rollback> tag in each describing how to roll the changeSet back.

    If there is no <rollback> tag, then Liquibase checks if the changes in the changeSet have built-in logic on how to roll themselves back. Like gile pointed out, if there is enough information in the change to undo it (like how the createTable change has the table name needed to drop the table) it will be able to still roll them back.

    But if there isn't enough information in the change (like how a dropTable doesn't have the information needed to re-create the table) then the rollback command will fail with a "cannot roll back" error.

    So the rollback logic is:

    1. Use what is defined in a block
    2. If no rollback block, try to deduce what is needed
    3. If there isn't enough information to roll back, exit before rolling back

    If you specify an empty rollback block, you are telling Liquibase "the logic needed to roll this back is to do nothing", so Liquibase happily runs your no-op rollback command and marks the changeSet as rolled back.

    0 讨论(0)
  • 2021-01-26 08:01

    Depending on your change sets, may be you fall in case of statements having rollback commands generated automatically, as for Liquibase Rollback documentation:

    Many refactorings such as “create table”, “rename column”, and “add column” can automatically create rollback statements. If your change log contains only statements that fit into this category, your rollback commands will be generated automatically.

    Other refactorings such as “drop table” and “insert data” have no corresponding rollback commands that can be automatically generated. In these cases, and cases where you want to override the default generated rollback commands, you can specify the rollback commands via the tag within the changeSet tag. If you do not want anything done to undo a change in rollback mode, use an empty tag.

    At http://forum.liquibase.org/topic/understanding-rollback you can find more details and other links.

    0 讨论(0)
提交回复
热议问题