Liquibase® version 3.8.1 is now available! Get it for free.
2018 XML Announcement
News Liquibase 3.8.1 Released
06 Nov 2019

- and/or -

All Previous Posts >>
Achieving Continuous Delivery at Fidelity Investments with IBM UrbanCode and Datical

Major Concepts

Changelog file

Developers store database changes in text-based files on their local development machines and apply them to their local databases. Changelog files can be be arbitrarily nested for better management. [more]

Change Set

Change Sets are the *units of change* that Liquibase tracks execution of. Each changeSet is uniquely identified by the "author", "id", and "filename" attributes. When Liquibase runs, it queries the DATABASECHANGELOG table for the changeSets that are marked as executed and then executes all changeSets in the changelog file that have not yet been executed. [more]

Changes

Each changeSet contains one or more changes that describe the change/refactoring to apply to the database. Liquibase supports both descriptive changes that generate SQL for supported databases and raw SQL. Generally there should be just one change per changeSet to avoid failed autocommit statements that can leave the database in an unexpected state. [more]

Preconditions

Preconditions can be applied to either the changelog as a whole or individual changeSets. Preconditions control the execution of an update based on the state of the database, and can halt the update, skip a changeset, mark a changeset as run, or show a warning. [more]

Contexts

Contexts can be applied to changeSets to control whether they are run in different environments. For example, some changeSets can be tagged as "production" and others as "test". If no context is specified, the changeSet will run regardless of the execution context. Contexts can be specified as logical expressions in the changeSet to more precisely control execution. At [more]

Labels

Similar to contexts, labels can also be applied to changeSets to control which changesets are executed. In contrast to contexts that can be complex expressions, labels are a simple list on each changeSet. For labels though, complex expressions can be supplied at runtime. The combination of contexts and labels gives fine grained control over which changeSets are executed. [more]

See this blog post for more details on the differences, similarities, and use cases for contexts and labels.