update
The update
command deploys any changes that are in the changelog file and that have not been deployed to your database yet.
Uses
The update
command is typically used to apply database changes that are specified in the changelog file to your database.
When you run the update
command, Liquibase sequentially reads changesets in the changelog file, then it compares the unique identifiers of id
, author
, and path to filename
to the values stored in the DATABASECHANGELOG table.
- If the unique identifiers do not exist, Liquibase will apply the changeset to the database.
- If the unique identifiers exist, the MD5Sum of the changeset is compared to the one in the database.
- If they are different, Liquibase will produce an error message that someone has changed it unexpectedly. However, if the status of the
runOnChange
orrunAlways
changeset attribute is set toTRUE
, Liquibase will re-apply the changeset.
In Liquibase Pro 4.25.1 and later, you can automatically generate a database Update Report summarizing this command.
Syntax
To run the update
command, specify the driver, classpath, and URL in the Liquibase properties file. For more information, see Create and Configure a liquibase.properties File. You can also specify these properties in your command line.
Then run the update
command:
liquibase update --changelog-file=example-changelog.xml
Parameters
Global parameters
Attribute | Definition | Requirement |
---|---|---|
|
For MSSQL only: Specifies in what catalog the Liquibase DATABASECHANGELOG and DATABASECHANGELOGLOCK tables will be managed |
Optional |
|
Specifies in what schema the Liquibase DATABASECHANGELOG and DATABASECHANGELOGLOCK tables will be managed |
Optional |
Command parameters
Attributes | Definition | Requirement |
---|---|---|
|
The root changelog |
Required |
|
The JDBC database connection URL. See Using JDBC URL in Liquibase. |
Required |
|
Fully-qualified class which specifies a |
Optional |
|
Path to a properties file for the |
Optional |
|
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 |
Optional |
|
Name of the default catalog to use for the database connection |
Optional |
|
Name of the default schema to use for the database connection. If Tip: In Liquibase v4.23.0+, camelCase for Note: The syntax |
Optional |
|
The JDBC driver class |
Optional |
|
The JDBC driver properties file |
Optional |
|
Liquibase Pro only. Use this argument only if you are specifying |
Optional |
|
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 to connect to the target database. Tip: It is a best practice to store sensitive data in a Secrets Management tool with Liquibase Pro. |
Optional |
|
Enables a report at the command level. Overrides the global argument |
Optional |
|
Specifies the name of the report file at the command level. Overrides the global argument |
Optional |
|
Specifies the file path to the report file at the command level. Overrides the global argument |
Optional |
|
Liquibase Pro only. If any changeset in a deployment fails, Note: A changeset marked |
Optional |
|
Liquibase 4.24.0+. Produces a summary list of any changesets skipped and why they were skipped. Valid values are Note: Liquibase may display one or multiple reasons for halting deployment of a changeset. If Liquibase cannot resolve a halting reason, it does not evaluate the changeset for other possible halting reasons. |
Optional |
|
Liquibase 4.24.0+. Summary output to report update summary results. Valid values are |
Optional |
|
Username to connect to the target database. Tip: It is a best practice to store sensitive data in a Secrets Management tool with Liquibase Pro. |
Optional |
Global parameters
Attribute | Definition | Requirement |
---|---|---|
|
For MSSQL only: Specifies in what catalog the Liquibase DATABASECHANGELOG and DATABASECHANGELOGLOCK tables will be managed |
Optional |
|
Specifies in what schema the Liquibase DATABASECHANGELOG and DATABASECHANGELOGLOCK tables will be managed |
Optional |
Command parameters
Attributes | Definition | Requirement |
---|---|---|
|
The root changelog |
Required |
|
The JDBC database connection URL. See Using JDBC URL in Liquibase. |
Required |
|
Fully-qualified class which specifies a |
Optional |
|
Path to a properties file for the |
Optional |
|
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 |
Optional |
|
Name of the default catalog to use for the database connection |
Optional |
|
Name of the default schema to use for the database connection. If Tip: In Liquibase v4.23.0+, camelCase for Note: The syntax |
Optional |
|
The JDBC driver class |
Optional |
|
The JDBC driver properties file |
Optional |
|
Liquibase Pro only. Use this argument only if you are specifying |
Optional |
|
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 to connect to the target database. Tip: It is a best practice to store sensitive data in a Secrets Management tool with Liquibase Pro. |
Optional |
|
Enables a report at the command level. Overrides the global argument |
Optional |
|
Specifies the name of the report file at the command level. Overrides the global argument |
Optional |
|
Specifies the file path to the report file at the command level. Overrides the global argument |
Optional |
|
Liquibase Pro only. If any changeset in a deployment fails, Note: A changeset marked |
Optional |
|
Liquibase 4.24.0+. Produces a summary list of any changesets skipped and why they were skipped. Valid values are Note: Liquibase may display one or multiple reasons for halting deployment of a changeset. If Liquibase cannot resolve a halting reason, it does not evaluate the changeset for other possible halting reasons. |
Optional |
|
Liquibase 4.24.0+. Summary output to report update summary results. Valid values are |
Optional |
|
Username to connect to the target database. Tip: It is a best practice to store sensitive data in a Secrets Management tool with Liquibase Pro. |
Optional |
Global parameters
Attribute | Definition | Requirement |
---|---|---|
|
For MSSQL only: Specifies in what catalog the Liquibase DATABASECHANGELOG and DATABASECHANGELOGLOCK tables will be managed |
Optional |
|
Specifies in what schema the Liquibase DATABASECHANGELOG and DATABASECHANGELOGLOCK tables will be managed |
Optional |
Command parameters
Attributes | Definition | Requirement |
---|---|---|
|
The root changelog |
Required |
|
The JDBC database connection URL. See Using JDBC URL in Liquibase. |
Required |
|
Fully-qualified class which specifies a |
Optional |
|
Path to a properties file for the |
Optional |
|
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 |
Optional |
|
Name of the default catalog to use for the database connection |
Optional |
|
Name of the default schema to use for the database connection. If Tip: In Liquibase v4.23.0+, camelCase for Note: The syntax |
Optional |
|
The JDBC driver class |
Optional |
|
The JDBC driver properties file |
Optional |
|
Liquibase Pro only. Use this argument only if you are specifying |
Optional |
|
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 to connect to the target database. Tip: It is a best practice to store sensitive data in a Secrets Management tool with Liquibase Pro. |
Optional |
|
Enables a report at the command level. Overrides the global argument |
Optional |
|
Specifies the name of the report file at the command level. Overrides the global argument |
Optional |
|
Specifies the file path to the report file at the command level. Overrides the global argument |
Optional |
|
Liquibase Pro only. If any changeset in a deployment fails, Note: A changeset marked |
Optional |
|
Liquibase 4.24.0+. Produces a summary list of any changesets skipped and why they were skipped. Valid values are Note: Liquibase may display one or multiple reasons for halting deployment of a changeset. If Liquibase cannot resolve a halting reason, it does not evaluate the changeset for other possible halting reasons. |
Optional |
|
Liquibase 4.24.0+. Summary output to report update summary results. Valid values are |
Optional |
|
Username to connect to the target database. Tip: It is a best practice to store sensitive data in a Secrets Management tool with Liquibase Pro. |
Optional |
Global parameters
Attribute | Definition | Requirement |
---|---|---|
|
For MSSQL only: Specifies in what catalog the Liquibase DATABASECHANGELOG and DATABASECHANGELOGLOCK tables will be managed |
Optional |
|
Specifies in what schema the Liquibase DATABASECHANGELOG and DATABASECHANGELOGLOCK tables will be managed |
Optional |
Command parameters
Attributes | Definition | Requirement |
---|---|---|
|
The root changelog |
Required |
|
The JDBC database connection URL. See Using JDBC URL in Liquibase. |
Required |
|
Fully-qualified class which specifies a |
Optional |
|
Path to a properties file for the |
Optional |
|
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 |
Optional |
|
Name of the default catalog to use for the database connection |
Optional |
|
Name of the default schema to use for the database connection. If Tip: In Liquibase v4.23.0+, camelCase for Note: The syntax |
Optional |
|
The JDBC driver class |
Optional |
|
The JDBC driver properties file |
Optional |
|
Liquibase Pro only. Use this argument only if you are specifying |
Optional |
|
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 to connect to the target database. Tip: It is a best practice to store sensitive data in a Secrets Management tool with Liquibase Pro. |
Optional |
|
Enables a report at the command level. Overrides the global argument |
Optional |
|
Specifies the name of the report file at the command level. Overrides the global argument |
Optional |
|
Specifies the file path to the report file at the command level. Overrides the global argument |
Optional |
|
Liquibase Pro only. If any changeset in a deployment fails, Note: A changeset marked |
Optional |
|
Liquibase 4.24.0+. Produces a summary list of any changesets skipped and why they were skipped. Valid values are Note: Liquibase may display one or multiple reasons for halting deployment of a changeset. If Liquibase cannot resolve a halting reason, it does not evaluate the changeset for other possible halting reasons. |
Optional |
|
Liquibase 4.24.0+. Summary output to report update summary results. Valid values are |
Optional |
|
Username to connect to the target database. Tip: It is a best practice to store sensitive data in a Secrets Management tool with Liquibase Pro. |
Optional |
Global parameters
Attribute | Definition | Requirement |
---|---|---|
|
For MSSQL only: Specifies in what catalog the Liquibase DATABASECHANGELOG and DATABASECHANGELOGLOCK tables will be managed |
Optional |
|
Specifies in what schema the Liquibase DATABASECHANGELOG and DATABASECHANGELOGLOCK tables will be managed |
Optional |
Command parameters
Attributes | Definition | Requirement |
---|---|---|
|
The root changelog |
Required |
|
The JDBC database connection URL. See Using JDBC URL in Liquibase. |
Required |
|
Fully-qualified class which specifies a |
Optional |
|
Path to a properties file for the |
Optional |
|
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 |
Optional |
|
Name of the default catalog to use for the database connection |
Optional |
|
Name of the default schema to use for the database connection. If Tip: In Liquibase v4.23.0+, camelCase for Note: The syntax |
Optional |
|
The JDBC driver class |
Optional |
|
The JDBC driver properties file |
Optional |
|
Liquibase Pro only. Use this argument only if you are specifying |
Optional |
|
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 to connect to the target database. Tip: It is a best practice to store sensitive data in a Secrets Management tool with Liquibase Pro. |
Optional |
|
Enables a report at the command level. Overrides the global argument |
Optional |
|
Specifies the name of the report file at the command level. Overrides the global argument |
Optional |
|
Specifies the file path to the report file at the command level. Overrides the global argument |
Optional |
|
Liquibase Pro only. If any changeset in a deployment fails, Note: A changeset marked |
Optional |
|
Liquibase 4.24.0+. Produces a summary list of any changesets skipped and why they were skipped. Valid values are Note: Liquibase may display one or multiple reasons for halting deployment of a changeset. If Liquibase cannot resolve a halting reason, it does not evaluate the changeset for other possible halting reasons. |
Optional |
|
Liquibase 4.24.0+. Summary output to report update summary results. Valid values are |
Optional |
|
Username to connect to the target database. Tip: It is a best practice to store sensitive data in a Secrets Management tool with Liquibase Pro. |
Optional |
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.
Successful deployments
With --show-summary=off
using Liquibase Open Source:
Liquibase Version: 4.30.0
Liquibase Open Source 4.30.0 by Liquibase
Running Changeset: example-changelog.xml::1::your.name
Running Changeset: example-changelog.xml::2::your.name
Running Changeset: example-changelog.xml::3::other.dev
Liquibase: Update has been successful. Rows affected: 3
Liquibase command 'update' was executed successfully.
With --show-summary=summary
using Liquibase Open Source:
Liquibase Version: 4.30.0
Liquibase Open Source 4.30.0 by Liquibase
Running Changeset: example-changelog.xml::1::your.name
Running Changeset: example-changelog.xml::2::your.name
Running Changeset: example-changelog.xml::3::other.dev
UPDATE SUMMARY
Run: 3
Previously run: 0
Filtered out: 0
-------------------------------
Total change sets: 3
Liquibase: Update has been successful. Rows affected: 3
Liquibase command 'update' was executed successfully.
With --show-summary=summary
and a valid Liquibase Pro license key, Liquibase also includes a line in the summary called "Failed deployment":
Liquibase Version: 4.30.0
Liquibase Pro 4.30.0 by Liquibase licensed to Liquibase until Wed Apr 30 20:00:00 EDT 2025
Running Changeset: example-changelog.xml::1::your.name
Running Changeset: example-changelog.xml::2::your.name
Running Changeset: example-changelog.xml::3::other.dev
UPDATE SUMMARY
Run: 3
Previously run: 0
Filtered out: 0
Failed deployment: 0
-------------------------------
Total change sets: 3
Liquibase: Update has been successful. Rows affected: 3
Liquibase command 'update' was executed successfully.
In Liquibase Open Source, --show-summary=verbose
has the same output as --show-summary=summary
.
In Liquibase Pro, --show-summary=verbose
also includes a table containing information about changesets that fail to deploy, but it doesn't appear if all your changesets deploy correctly.
Failed deployments
In the following examples, the fourth changeset is a duplicate that Liquibase fails to deploy.
With --show-summary=off
using Liquibase Open Source:
Liquibase Version: 4.30.0
Liquibase Open Source 4.30.0 by Liquibase
Running Changeset: example-changelog.xml::1::your.name
Running Changeset: example-changelog.xml::2::your.name
Running Changeset: example-changelog.xml::3::other.dev
Running Changeset: example-changelog.xml::4::other.dev
With --show-summary=summary
using Liquibase Open Source:
Liquibase Version: 4.30.0
Liquibase Open Source 4.30.0 by Liquibase
Running Changeset: example-changelog.xml::1::your.name
Running Changeset: example-changelog.xml::2::your.name
Running Changeset: example-changelog.xml::3::other.dev
Running Changeset: example-changelog.xml::4::other.dev
UPDATE SUMMARY
Run: 3
Previously run: 0
Filtered out: 0
-------------------------------
Total change sets: 4
With --show-summary=summary
and a valid Liquibase Pro license key, Liquibase also includes a line in the summary called "Failed deployment":
Liquibase Version: 4.30.0
Liquibase Pro 4.30.0 by Liquibase licensed to Liquibase until Wed Apr 30 20:00:00 EDT 2025
Running Changeset: example-changelog.xml::1::your.name
Running Changeset: example-changelog.xml::2::your.name
Running Changeset: example-changelog.xml::3::other.dev
Running Changeset: example-changelog.xml::4::other.dev
UPDATE SUMMARY
Run: 3
Previously run: 0
Filtered out: 0
Failed deployment: 1
-------------------------------
Total change sets: 4
With --show-summary=verbose
and a valid Liquibase Pro license key, Liquibase also includes a table summarizing the reason each changeset failed:
Liquibase Version: 4.30.0
Liquibase Pro 4.30.0 by Liquibase licensed to Liquibase until Wed Apr 30 20:00:00 EDT 2025
Running Changeset: example-changelog.xml::1::your.name
Running Changeset: example-changelog.xml::2::your.name
Running Changeset: example-changelog.xml::3::other.dev
Running Changeset: example-changelog.xml::4::other.dev
UPDATE SUMMARY
Run: 3
Previously run: 0
Filtered out: 0
Failed deployment: 1
-------------------------------
Total change sets: 4
+-------------------------------------+----------------------------+
| Changeset Info | Reason Skipped |
+-------------------------------------+----------------------------+
| example-changelog.xml::4::other.dev | Changeset failed to deploy |
+-------------------------------------+----------------------------+
Error message
In any example with a failed changeset, Liquibase also includes an error message and stack trace after the update summary:
ERROR: Exception Details
ERROR: Exception Primary Class: JdbcSQLSyntaxErrorException
ERROR: Exception Primary Reason: Duplicate column name "COUNTRY"; SQL statement:
ALTER TABLE PUBLIC.person ADD country VARCHAR(2) [42121-224]
ERROR: Exception Primary Source: H2 2.2.224 (2023-09-17)
ERROR: Exception Details
ERROR: Exception Primary Class: JdbcSQLSyntaxErrorException
ERROR: Exception Primary Reason: Duplicate column name "COUNTRY"; SQL statement:
ALTER TABLE PUBLIC.person ADD country VARCHAR(2) [42121-224]
ERROR: Exception Primary Source: H2 2.2.224 (2023-09-17)
Unexpected error running Liquibase: Migration failed for changeset example-changelog.xml::4::other.dev:
Reason: liquibase.exception.DatabaseException: Duplicate column name "COUNTRY"; SQL statement:
ALTER TABLE PUBLIC.person ADD country VARCHAR(2) [42121-224] [Failed SQL: (42121) ALTER TABLE PUBLIC.person ADD country VARCHAR(2)]
Update Report output
If the Update Report is enabled, Liquibase also includes this in the output:
Pro Update Report created!
* File '/C:/path/to/report/Update-report-26-Nov-2024-102245.html' was created.
** To suppress Update reports add command arg 'liquibase update --report-enabled=false'
** To suppress all Pro Reports set liquibase.reports.enabled=false, or LIQUIBASE_REPORTS_ENABLED=false