Database / Liquibase interview questions
How does rollback work in Liquibase?
Liquibase rollback allows you to undo previously applied changeSets, reverting the database to an earlier state. There are two ways to define rollback behavior for a changeSet: automatic rollback and explicit rollback.
For many built-in Liquibase change types — createTable, addColumn, createIndex, addForeignKeyConstraint — Liquibase can automatically generate the inverse operation (DROP TABLE, DROP COLUMN, etc.) without you writing anything. These are called automatically reversible changes.
For changes that are not automatically reversible — dropTable, insert, sql, any custom SQL — you must provide an explicit rollback block:
<changeSet id="add-status-column" author="dave"> <addColumn tableName="order"> <column name="status" type="VARCHAR(20)" defaultValue="PENDING"/> </addColumn> <!-- Explicit rollback not needed here - addColumn is auto-reversible --> </changeSet> <changeSet id="populate-status" author="dave"> <sql>UPDATE "order" SET status = 'PENDING' WHERE status IS NULL</sql> <rollback> <!-- We cannot un-update rows without knowing old values, so mark empty --> <sql>-- intentionally empty: data rollback not feasible</sql> </rollback> </changeSet>
Rollback commands available in Liquibase:
rollback <tag>— rolls back all changeSets applied after the specified tag.rollbackCount <N>— rolls back the last N changeSets.rollbackToDate <datetime>— rolls back to a specific point in time.
You can also preview what would be rolled back without actually executing it using rollbackSQL, rollbackCountSQL, etc. — these generate the SQL that would be run, letting you review before committing.
More Related questions...