Database / Liquibase interview questions
What are labels in Liquibase and how do they differ from contexts?
Labels in Liquibase look superficially similar to contexts — both are string tags on a changeSet used to filter which changeSets run. The key difference is in where the expression logic lives. With contexts, the filtering expression is written on the changeSet itself (e.g., context="!prod"). With labels, the expression is passed at runtime (e.g., --label-filter="release-2.0 and !experimental") — the changeSet just lists its labels, and the caller decides the filter logic.
| Aspect | Contexts | Labels |
|---|---|---|
| Where filter logic lives | On the changeSet attribute | Passed at runtime via --label-filter |
| Typical use | Environment targeting (dev/test/prod) | Feature flags, release batches, sprint grouping |
| Boolean expressions | On the changeSet (e.g., !prod) | On the command line (e.g., release-2.0 and !experimental) |
| No-match behavior | changeSet with no context runs always | changeSet with no label runs always (when a filter is active) |
Example: A team tags each changeSet with a sprint or release label:
<changeSet id="add-audit-columns" author="carol" labels="release-3.1,audit-feature"> <addColumn tableName="orders"> <column name="created_by" type="VARCHAR(100)"/> </addColumn> </changeSet>
To deploy only release-3.1 changes: liquibase --label-filter="release-3.1" update. Labels give operations teams flexibility to apply subsets of a changeLog — for phased rollouts, feature deployments, or running only a specific batch of changes in a maintenance window.
More Related questions...