set-contexts

Last updated: January 21, 2026

Note: This is a Liquibase Secure feature, so you need a Liquibase Secure License Key to use it.

The set-contexts command sets or replaces contexts on your changesets using your command line. This is an alternative to setting contexts directly in your changelog.

You can choose which changesets to target by specifying a changeset author, ID, path, or an existing context or label filter.

The command works with any SQL, XML, YAML, or JSON changelog. It also works with multiple changelogs specified with the include or includeAll tags. set-contexts is available in Liquibase 4.23.1+.

Uses

If you need to apply contextsto many changesets, manually inserting them into your changelog is slow and can lead to errors. Instead, use set-contexts to quickly add or replace contextsin bulk.

By default, Liquibase appends any contextsyou specify with set-contexts to the list of contextsalready on your changesets. However, if you set --force-replace to true, Liquibase drops existing contextsbefore adding the new ones.

The command is also useful if you want to standardize multiple similar contextsor replace deprecated ones. You can specify command arguments to control the formatting Liquibase uses when it inserts the contextsinto your changelog.

After setting your contextswith set-contexts, you can deploy your changes with the update command. While deploying, specify the --context-filter command argument to control which changesets are run.

Syntax

To run the set-contexts command, specify the driver, classpath, and URL in Liquibase properties file. You can also specify these properties in your command line.

Then run the set-contexts command:

liquibase set-contexts --changelog-file=example-changelog.xml --set-as=dev,test

For example, targeting changesets by author and existing label filter:

liquibase set-contexts --set-as="dev, stage" --changelog-file=release-02.sql --changeset-author="bob" --label-filter="rel-02"

Replacing existing contextswith --force-replace instead of appending them:

liquibase set-contexts --set-as=dev, stage --changelog-file=release-02.sql --changeset-author="bob" --context-filter="dev,uat,stage" --label-filter="rel-02" --force-replace=true

Note: Even though you're setting contextswith this command, you can still target changesets using both context-filter and label-filter.

Note: The username and password attributes are not required for connections and systems which use alternate means of authentication. Also, you can specify database credentials as part of the url attribute.

Parameters

Global parameters

Attribute

Definition

Requirements

--license-key=<string>

Your Liquibase Secure license key

Required

Command parameters

Attribute

Definition

Requirements

--changelog-file=<string>

The root changelog

Required

--set-as=<string>

Specifies the context(s)/label(s) to apply to the changesets you select. Case-insensitive. Separate multiple values with commas (equivalent to OR) or the AND operator. If you use a space between multiple values, you must surround the entire string with quotes. Otherwise, quotes are optional. For example, --set-as=dev, --set-as="(\!dev and test)" or qa, and --set-as="dev, test" are all valid. User-supplied regular expressions are not supported, but you can use * as a wildcard.

Required

--changeset-author=<string>

The name of the author for the changeset. Supports * as a wildcard.

Optional

--changeset-id=<string>

The changeset ID from the changelog.

Optional

--changeset-path=<string>

The path to the changelog containing the changeset you want to target. For example, you may have a root changelog (root.sql) and a child changelog (child.sql). To target a specific changeset in child.sql, specify --changeset-path=child.sql.

If root.sql uses include, includeAll, or sqlFile to reference child.sql, you must also specify --changelog-file=root.sql (file and path are different).

If root.sql does not reference child.sql, you must also specify --changelog-file=child.sql (file and path are the same).

If you only have one changelog, then --changelog-file and --changeset-path must also be the same.

Optional

--context-filter=<string>

Specifies the changeset contexts to match. Contexts are tags you can add to changesets to control which changesets are executed in any particular migration run.

Note: If you use Liquibase 4.23.0 or earlier, use the syntax --contexts instead of --context-filter.

Optional

--dbms=<string>

Specifies which database type a changeset is to be used for. See valid database type names on dbms. The keywords all and none are also available.

Optional

--default-catalog-name=<string>

Name of the default catalog to use for the database connection

Optional

--default-schema-name=<string>

Name of the default schema to use for the database connection. If defaultSchemaName is set, then objects do not have to be fully qualified. This means you can refer to just mytable instead of myschema.mytable.

Note: In the properties file and JAVA_OPTS only: in 4.18.0 and earlier, specify this parameter using the syntax defaultSchemaName. In 4.19.0 and later, use the syntax liquibase.command.defaultSchemaName.

Note: In Liquibase 4.12.0 and later, you can use mixed-case schema names if you set --preserve-schema-case to true. However, in Liquibase 4.12.0–4.22.0, the Liquibase validator still throws a DatabaseException error if you specify a mixed-case value of defaultSchemaName. In 4.23.0 and later, the Liquibase validator accepts any casing.

Optional

--driver=<string>

The JDBC driver class

Optional

--driver-properties-file=<string>

The JDBC driver properties file

Optional

--force-replace=<true|false>

If true, replace any existing contexts/labels with the new ones rather than appending them to the list. If you specify --force-replace without a value, Liquibase sets it to true. Default: false.

Optional

--label-filter=<string>

Specifies the changeset labels to match. Labels are tags you can add to changesets to control which changesets will be executed in any migration run.

Optional

--password=<string>

Password to connect to the target database.

Optional

--url=<string>

The JDBC database connection URL.

Optional

--username=<string>

Username to connect to the target database.

Optional

Global parameters

Attribute

Definition

Requirements

globalArgs: { license-key: "<string>" }

Your Liquibase Secure license key

Required

Command parameters

Attribute

Definition

Requirements

cmdArgs: { changelog-file: "<string>" }

The root changelog

Required

cmdArgs: { set-as: "<string>" }

Specifies the context(s)/label(s) to apply to the changesets you select. Case-insensitive. Separate multiple values with commas (equivalent to OR) or the AND operator. If you use a space between multiple values, you must surround the entire string with quotes. Otherwise, quotes are optional. For example, --set-as=dev, --set-as="(\!dev and test)" or qa, and --set-as="dev, test" are all valid. User-supplied regular expressions are not supported, but you can use * as a wildcard.

Required

cmdArgs: { changeset-author: "<string>" }

The name of the author for the changeset. Supports * as a wildcard.

Optional

cmdArgs: { changeset-id: "<string>" }

The changeset ID from the changelog.

Optional

cmdArgs: { changeset-path: "<string>" }

The path to the changelog containing the changeset you want to target. For example, you may have a root changelog (root.sql) and a child changelog (child.sql). To target a specific changeset in child.sql, specify --changeset-path=child.sql.

If root.sql uses include, includeAll, or sqlFile to reference child.sql, you must also specify --changelog-file=root.sql (file and path are different).

If root.sql does not reference child.sql, you must also specify --changelog-file=child.sql (file and path are the same).

If you only have one changelog, then --changelog-file and --changeset-path must also be the same.

Optional

cmdArgs: { context-filter: "<string>" }

Specifies the changeset contexts to match. Contexts are tags you can add to changesets to control which changesets are executed in any particular migration run.

Note: If you use Liquibase 4.23.0 or earlier, use the syntax --contexts instead of --context-filter.

Optional

cmdArgs: { dbms: "<string>" }

Specifies which database type a changeset is to be used for. See valid database type names on dbms. The keywords all and none are also available.

Optional

cmdArgs: { default-catalog-name: "<string>" }

Name of the default catalog to use for the database connection

Optional

cmdArgs: { default-schema-name: "<string>" }

Name of the default schema to use for the database connection. If defaultSchemaName is set, then objects do not have to be fully qualified. This means you can refer to just mytable instead of myschema.mytable.

Note: In the properties file and JAVA_OPTS only: in 4.18.0 and earlier, specify this parameter using the syntax defaultSchemaName. In 4.19.0 and later, use the syntax liquibase.command.defaultSchemaName.

Note: In Liquibase 4.12.0 and later, you can use mixed-case schema names if you set --preserve-schema-case to true. However, in Liquibase 4.12.0–4.22.0, the Liquibase validator still throws a DatabaseException error if you specify a mixed-case value of defaultSchemaName. In 4.23.0 and later, the Liquibase validator accepts any casing.

Optional

cmdArgs: { driver: "<string>" }

The JDBC driver class

Optional

cmdArgs: { driver-properties-file: "<string>" }

The JDBC driver properties file

Optional

cmdArgs: { force-replace: "<true|false>" }

If true, replace any existing contexts/labels with the new ones rather than appending them to the list. If you specify --force-replace without a value, Liquibase sets it to true. Default: false.

Optional

cmdArgs: { label-filter: "<string>" }

Specifies the changeset labels to match. Labels are tags you can add to changesets to control which changesets will be executed in any migration run.

Optional

cmdArgs: { password: "<string>" }

Password to connect to the target database.

Optional

cmdArgs: { url: "<string>" }

The JDBC database connection URL.

Optional

cmdArgs: { username: "<string>" }

Username to connect to the target database.

Optional

Global parameters

Attribute

Definition

Requirements

liquibase.licenseKey: <string>

Your Liquibase Secure license key

Required

Command parameters

Attribute

Definition

Requirements

liquibase.command.changelogFile: <string>

liquibase.command.setContexts.changelogFile: <string>

The root changelog

Required

liquibase.command.setAs: <string>

liquibase.command.setContexts.setAs: <string>

Specifies the context(s)/label(s) to apply to the changesets you select. Case-insensitive. Separate multiple values with commas (equivalent to OR) or the AND operator. If you use a space between multiple values, you must surround the entire string with quotes. Otherwise, quotes are optional. For example, --set-as=dev, --set-as="(\!dev and test)" or qa, and --set-as="dev, test" are all valid. User-supplied regular expressions are not supported, but you can use * as a wildcard.

Required

liquibase.command.changesetAuthor: <string>

liquibase.command.setContexts.changesetAuthor: <string>

The name of the author for the changeset. Supports * as a wildcard.

Optional

liquibase.command.changesetId: <string>

liquibase.command.setContexts.changesetId: <string>

The changeset ID from the changelog.

Optional

liquibase.command.changesetPath: <string>

liquibase.command.setContexts.changesetPath: <string>

The path to the changelog containing the changeset you want to target. For example, you may have a root changelog (root.sql) and a child changelog (child.sql). To target a specific changeset in child.sql, specify --changeset-path=child.sql.

If root.sql uses include, includeAll, or sqlFile to reference child.sql, you must also specify --changelog-file=root.sql (file and path are different).

If root.sql does not reference child.sql, you must also specify --changelog-file=child.sql (file and path are the same).

If you only have one changelog, then --changelog-file and --changeset-path must also be the same.

Optional

liquibase.command.contextFilter: <string>

liquibase.command.setContexts.contextFilter: <string>

Specifies the changeset contexts to match. Contexts are tags you can add to changesets to control which changesets are executed in any particular migration run.

Note: If you use Liquibase 4.23.0 or earlier, use the syntax --contexts instead of --context-filter.

Optional

liquibase.command.dbms: <string>

liquibase.command.setContexts.dbms: <string>

Specifies which database type a changeset is to be used for. See valid database type names on dbms. The keywords all and none are also available.

Optional

liquibase.command.defaultCatalogName: <string>

liquibase.command.setContexts.defaultCatalogName: <string>

Name of the default catalog to use for the database connection

Optional

liquibase.command.defaultSchemaName: <string>

liquibase.command.setContexts.defaultSchemaName: <string>

Name of the default schema to use for the database connection. If defaultSchemaName is set, then objects do not have to be fully qualified. This means you can refer to just mytable instead of myschema.mytable.

Note: In the properties file and JAVA_OPTS only: in 4.18.0 and earlier, specify this parameter using the syntax defaultSchemaName. In 4.19.0 and later, use the syntax liquibase.command.defaultSchemaName.

Note: In Liquibase 4.12.0 and later, you can use mixed-case schema names if you set --preserve-schema-case to true. However, in Liquibase 4.12.0–4.22.0, the Liquibase validator still throws a DatabaseException error if you specify a mixed-case value of defaultSchemaName. In 4.23.0 and later, the Liquibase validator accepts any casing.

Optional

liquibase.command.driver: <string>

liquibase.command.setContexts.driver: <string>

The JDBC driver class

Optional

liquibase.command.driverPropertiesFile: <string>

liquibase.command.setContexts.driverPropertiesFile: <string>

The JDBC driver properties file

Optional

liquibase.command.forceReplace: <true|false>

liquibase.command.setContexts.forceReplace: <true|false>

If true, replace any existing contexts/labels with the new ones rather than appending them to the list. If you specify --force-replace without a value, Liquibase sets it to true. Default: false.

Optional

liquibase.command.labelFilter: <string>

liquibase.command.setContexts.labelFilter: <string>

Specifies the changeset labels to match. Labels are tags you can add to changesets to control which changesets will be executed in any migration run.

Optional

liquibase.command.password: <string>

liquibase.command.setContexts.password: <string>

Password to connect to the target database.

Optional

liquibase.command.url: <string>

liquibase.command.setContexts.url: <string>

The JDBC database connection URL.

Optional

liquibase.command.username: <string>

liquibase.command.setContexts.username: <string>

Username to connect to the target database.

Optional

Global parameters

Attribute

Definition

Requirements

JAVA_OPTS=-Dliquibase.licenseKey=<string>

Your Liquibase Secure license key

Required

Command parameters

Attribute

Definition

Requirements

JAVA_OPTS=-Dliquibase.command.changelogFile=<string>

JAVA_OPTS=-Dliquibase.command.setContexts.changelogFile=<string>

The root changelog

Required

JAVA_OPTS=-Dliquibase.command.setAs=<string>

JAVA_OPTS=-Dliquibase.command.setContexts.setAs=<string>

Specifies the context(s)/label(s) to apply to the changesets you select. Case-insensitive. Separate multiple values with commas (equivalent to OR) or the AND operator. If you use a space between multiple values, you must surround the entire string with quotes. Otherwise, quotes are optional. For example, --set-as=dev, --set-as="(\!dev and test)" or qa, and --set-as="dev, test" are all valid. User-supplied regular expressions are not supported, but you can use * as a wildcard.

Required

JAVA_OPTS=-Dliquibase.command.changesetAuthor=<string>

JAVA_OPTS=-Dliquibase.command.setContexts.changesetAuthor=<string>

The name of the author for the changeset. Supports * as a wildcard.

Optional

JAVA_OPTS=-Dliquibase.command.changesetId=<string>

JAVA_OPTS=-Dliquibase.command.setContexts.changesetId=<string>

The changeset ID from the changelog.

Optional

JAVA_OPTS=-Dliquibase.command.changesetPath=<string>

JAVA_OPTS=-Dliquibase.command.setContexts.changesetPath=<string>

The path to the changelog containing the changeset you want to target. For example, you may have a root changelog (root.sql) and a child changelog (child.sql). To target a specific changeset in child.sql, specify --changeset-path=child.sql.

If root.sql uses include, includeAll, or sqlFile to reference child.sql, you must also specify --changelog-file=root.sql (file and path are different).

If root.sql does not reference child.sql, you must also specify --changelog-file=child.sql (file and path are the same).

If you only have one changelog, then --changelog-file and --changeset-path must also be the same.

Optional

JAVA_OPTS=-Dliquibase.command.contextFilter=<string>

JAVA_OPTS=-Dliquibase.command.setContexts.contextFilter=<string>

Specifies the changeset contexts to match. Contexts are tags you can add to changesets to control which changesets are executed in any particular migration run.

Note: If you use Liquibase 4.23.0 or earlier, use the syntax --contexts instead of --context-filter.

Optional

JAVA_OPTS=-Dliquibase.command.dbms=<string>

JAVA_OPTS=-Dliquibase.command.setContexts.dbms=<string>

Specifies which database type a changeset is to be used for. See valid database type names on dbms. The keywords all and none are also available.

Optional

JAVA_OPTS=-Dliquibase.command.defaultCatalogName=<string>

JAVA_OPTS=-Dliquibase.command.setContexts.defaultCatalogName=<string>

Name of the default catalog to use for the database connection

Optional

JAVA_OPTS=-Dliquibase.command.defaultSchemaName=<string>

JAVA_OPTS=-Dliquibase.command.setContexts.defaultSchemaName=<string>

Name of the default schema to use for the database connection. If defaultSchemaName is set, then objects do not have to be fully qualified. This means you can refer to just mytable instead of myschema.mytable.

Note: In the properties file and JAVA_OPTS only: in 4.18.0 and earlier, specify this parameter using the syntax defaultSchemaName. In 4.19.0 and later, use the syntax liquibase.command.defaultSchemaName.

Note: In Liquibase 4.12.0 and later, you can use mixed-case schema names if you set --preserve-schema-case to true. However, in Liquibase 4.12.0–4.22.0, the Liquibase validator still throws a DatabaseException error if you specify a mixed-case value of defaultSchemaName. In 4.23.0 and later, the Liquibase validator accepts any casing.

Optional

JAVA_OPTS=-Dliquibase.command.driver=<string>

JAVA_OPTS=-Dliquibase.command.setContexts.driver=<string>

The JDBC driver class

Optional

JAVA_OPTS=-Dliquibase.command.driverPropertiesFile=<string>

JAVA_OPTS=-Dliquibase.command.setContexts.driverPropertiesFile=<string>

The JDBC driver properties file

Optional

JAVA_OPTS=-Dliquibase.command.forceReplace=<true|false>

JAVA_OPTS=-Dliquibase.command.setContexts.forceReplace=<true|false>

If true, replace any existing contexts/labels with the new ones rather than appending them to the list. If you specify --force-replace without a value, Liquibase sets it to true. Default: false.

Optional

JAVA_OPTS=-Dliquibase.command.labelFilter=<string>

JAVA_OPTS=-Dliquibase.command.setContexts.labelFilter=<string>

Specifies the changeset labels to match. Labels are tags you can add to changesets to control which changesets will be executed in any migration run.

Optional

JAVA_OPTS=-Dliquibase.command.password=<string>

JAVA_OPTS=-Dliquibase.command.setContexts.password=<string>

Password to connect to the target database.

Optional

JAVA_OPTS=-Dliquibase.command.url=<string>

JAVA_OPTS=-Dliquibase.command.setContexts.url=<string>

The JDBC database connection URL.

Optional

JAVA_OPTS=-Dliquibase.command.username=<string>

JAVA_OPTS=-Dliquibase.command.setContexts.username=<string>

Username to connect to the target database.

Optional

Global parameters

Attribute

Definition

Requirements

LIQUIBASE_LICENSE_KEY=<string>

Your Liquibase Secure license key

Required

Command parameters

Attribute

Definition

Requirements

LIQUIBASE_COMMAND_CHANGELOG_FILE=<string>

LIQUIBASE_COMMAND_SET_CONTEXTS_CHANGELOG_FILE=<string>

The root changelog

Required

LIQUIBASE_COMMAND_SET_AS=<string>

LIQUIBASE_COMMAND_SET_CONTEXTS_SET_AS=<string>

Specifies the context(s)/label(s) to apply to the changesets you select. Case-insensitive. Separate multiple values with commas (equivalent to OR) or the AND operator. If you use a space between multiple values, you must surround the entire string with quotes. Otherwise, quotes are optional. For example, --set-as=dev, --set-as="(\!dev and test)" or qa, and --set-as="dev, test" are all valid. User-supplied regular expressions are not supported, but you can use * as a wildcard.

Required

LIQUIBASE_COMMAND_CHANGESET_AUTHOR=<string>

LIQUIBASE_COMMAND_SET_CONTEXTS_CHANGESET_AUTHOR=<string>

The name of the author for the changeset. Supports * as a wildcard.

Optional

LIQUIBASE_COMMAND_CHANGESET_ID=<string>

LIQUIBASE_COMMAND_SET_CONTEXTS_CHANGESET_ID=<string>

The changeset ID from the changelog.

Optional

LIQUIBASE_COMMAND_CHANGESET_PATH=<string>

LIQUIBASE_COMMAND_SET_CONTEXTS_CHANGESET_PATH=<string>

The path to the changelog containing the changeset you want to target. For example, you may have a root changelog (root.sql) and a child changelog (child.sql). To target a specific changeset in child.sql, specify --changeset-path=child.sql.

If root.sql uses include, includeAll, or sqlFile to reference child.sql, you must also specify --changelog-file=root.sql (file and path are different).

If root.sql does not reference child.sql, you must also specify --changelog-file=child.sql (file and path are the same).

If you only have one changelog, then --changelog-file and --changeset-path must also be the same.

Optional

LIQUIBASE_COMMAND_CONTEXT_FILTER=<string>

LIQUIBASE_COMMAND_SET_CONTEXTS_CONTEXT_FILTER=<string>

Specifies the changeset contexts to match. Contexts are tags you can add to changesets to control which changesets are executed in any particular migration run.

Note: If you use Liquibase 4.23.0 or earlier, use the syntax --contexts instead of --context-filter.

Optional

LIQUIBASE_COMMAND_DBMS=<string>

LIQUIBASE_COMMAND_SET_CONTEXTS_DBMS=<string>

Specifies which database type a changeset is to be used for. See valid database type names on dbms. The keywords all and none are also available.

Optional

LIQUIBASE_COMMAND_DEFAULT_CATALOG_NAME=<string>

LIQUIBASE_COMMAND_SET_CONTEXTS_DEFAULT_CATALOG_NAME=<string>

Name of the default catalog to use for the database connection

Optional

LIQUIBASE_COMMAND_DEFAULT_SCHEMA_NAME=<string>

LIQUIBASE_COMMAND_SET_CONTEXTS_DEFAULT_SCHEMA_NAME=<string>

Name of the default schema to use for the database connection. If defaultSchemaName is set, then objects do not have to be fully qualified. This means you can refer to just mytable instead of myschema.mytable.

Note: In the properties file and JAVA_OPTS only: in 4.18.0 and earlier, specify this parameter using the syntax defaultSchemaName. In 4.19.0 and later, use the syntax liquibase.command.defaultSchemaName.

Note: In Liquibase 4.12.0 and later, you can use mixed-case schema names if you set --preserve-schema-case to true. However, in Liquibase 4.12.0–4.22.0, the Liquibase validator still throws a DatabaseException error if you specify a mixed-case value of defaultSchemaName. In 4.23.0 and later, the Liquibase validator accepts any casing.

Optional

LIQUIBASE_COMMAND_DRIVER=<string>

LIQUIBASE_COMMAND_SET_CONTEXTS_DRIVER=<string>

The JDBC driver class

Optional

LIQUIBASE_COMMAND_DRIVER_PROPERTIES_FILE=<string>

LIQUIBASE_COMMAND_SET_CONTEXTS_DRIVER_PROPERTIES_FILE=<string>

The JDBC driver properties file

Optional

LIQUIBASE_COMMAND_FORCE_REPLACE=<true|false>

LIQUIBASE_COMMAND_SET_CONTEXTS_FORCE_REPLACE=<true|false>

If true, replace any existing contexts/labels with the new ones rather than appending them to the list. If you specify --force-replace without a value, Liquibase sets it to true. Default: false.

Optional

LIQUIBASE_COMMAND_LABEL_FILTER=<string>

LIQUIBASE_COMMAND_SET_CONTEXTS_LABEL_FILTER=<string>

Specifies the changeset labels to match. Labels are tags you can add to changesets to control which changesets will be executed in any migration run.

Optional

LIQUIBASE_COMMAND_PASSWORD=<string>

LIQUIBASE_COMMAND_SET_CONTEXTS_PASSWORD=<string>

Password to connect to the target database.

Optional

LIQUIBASE_COMMAND_URL=<string>

LIQUIBASE_COMMAND_SET_CONTEXTS_URL=<string>

The JDBC database connection URL.

Optional

LIQUIBASE_COMMAND_USERNAME=<string>

LIQUIBASE_COMMAND_SET_CONTEXTS_USERNAME=<string>

Username to connect to the target database.

Optional

Output

When successful, the set-contexts command produces the following output:

* Changelog file 'changelog.xml' modified successfully. Liquibase command 'set-contexts' was executed successfully.

If you specify an invalid value for the dbms argument:

Mismatched dbms for changeset 'createPrimaryTable::Liquibase Secure User::changelog.xml'

When there is an ignored changeset:

Ignoring changeset 'createSecondaryTable::Liquibase Secure User::changelog.xml'

When there is nothing to modify:

* Changelog file 'changelog.xml' was not modified.