Liquibase Commands

Liquibase comes with several commands that can help you migrate and make changes to your databases. The following is a list of all commands available:

Tip: For best results, specify all commands and parameters in the --kebab-case format in the CLI. If your preference is camelCase, it also works in the CLI.

Liquibase start commands

Command Description
init copy

The copy subcommand copies project files from a source directory to a target directory.

init hub

The hub subcommand connects your local Liquibase activity to Liquibase Hub with an API key and sets up the Liquibase environment to use Liquibase Hub.

init project

The project subcommand finds or creates your project folder with the changelog and Liquibase properties files and delivers an example H2 database to help you get started.

init start-h2

The start-h2 subcommand starts the in-memory H2 database included in the Liquibase installation package to get started and test how Liquibase works.

Liquibase flow commands

Command Description

Creates portable, platform-independent Liquibase workflows that can run anywhere without modification. Flow allows you to put multiple commands in a single file, called a Flow File, so they can all run sequentially by typing a single command into the CLI. The flow command provides the convenience of performing all of the steps in one place.

flow validate

Validate a series of commands contained in one or more stages, as configured in a Liquibase flow file.

Database update commands

Command Description
drop-all Drops all database objects owned by the user.
execute-sql Executes a SQL string or file.
update Updates database to current version.
update-sql A helper command that allows you to inspect the SQL Liquibase will run while using the update command.
update-count Applies the next <value> changesets.
update-count-sql Writes SQL to apply the next <value> changesets to STDOUT.
update-one-changeset Targets and deploys any single changeset.
update-one-changeset-sql Writes SQL to target and deploy any single changeset.
update-testing-rollback Updates the database, then rolls back changes before updating again.
update-to-tag Applies sequential changes to your database from the newest changeset to the changeset with the tag you specified and applied earlier.
update-to-tag-sql A helper command that inspects the SQL Liquibase will run while using the update-to-tag command.
validate Checks the changelog for errors.

Database rollback commands

For information about how Liquibase rollbacks work, see Liquibase Rollback Workflow and Automatic and Custom Rollbacks.

Command Description
rollback Rolls back the database to the state it was in when the tag was applied.
rollback-sql A helper command that produces the raw SQL Liquibase would run when using the rollbackByTag command.
rollback-to-date Rolls back the database to the state it was in at the given date/time.
rollback-to-date-sql A helper command that allows you to inspect the SQL Liquibase will run while using the rollback-to-date command.
rollback-count Rolls back the last <value> changesets.
rollback-count-sql Writes SQL to roll back the last <value> changesets to STDOUT.
rollback-one-changeset Rolls back a single changeset without needing to roll back other already applied changeset.
rollback-one-changeset-sql Writes SQL to roll back a single changeset to STDOUT.
rollback-one-update Rolls back all changesets related by a specific deploymentId that was made during a previous change to your database.
rollback-one-update-sql A helper command that allows you to inspect the SQL Liquibase will run to revert all changeset associated with the deploymentID specified in the rollback-one-update command.
future-rollback-sql Writes SQL to roll back the database to the current state after the changes in the changelog have been applied.
future-rollback-count-sql Generates the SQL that Liquibase would use to sequentially revert the number of changes associated with undeployed changesets, which are added to a changelog file.
future-rollback-from-tag-sql Produces the raw SQL Liquibase would need to roll back all undeployed changes made up to the specified tag.

Database inspection commands

Command Description
diff Writes description of differences between two databases to standard out.
diff JSON Allows you to compare two databases of the same type, or different types, to one another and use the output in a JSON format.
diff-changelog Adds any differences between the databases specified to a changelog. Can append in any of the supported changelog formats.
generate-changelog Generate a changelog from a database when adding Liquibase to a new project. This is synonymous with snapshot with the exception of saving the output as XML in the changelog.
snapshot Gathers the current database schema and displays that information to STDOUT. With options, can save the schema in JSON format, and that JSON snapshot can serve as a comparison database.
snapshot-reference Captures the current state of the referenceURL database, which is the source database.

Change tracking commands

Command Description
changelog-sync Marks all changes as executed in the database.
changelog-sync-sql Writes SQL to mark all changes as executed in the database to STDOUT.
changelog-sync-to-tag Marks all undeployed changesets from your changelog up to and including the specified tag as executed in your database.
changelog-sync-to-tag-sql Produces the raw SQL that Liquibase would run when using the changelog-sync-to-tag command to mark all undeployed changesets associated with the specified tag as executed in your database.
db-doc Generates Javadoc-like documentation based on current database and changelog.
history Lists all deployed changesets and their deploymentIds.
mark-next-changeset-ran Mark the next change set as executed in the database.
mark-next-changeset-ran-sql Inspects the SQL Liquibase will run while using the mark-next-changeset-ran command.
status Outputs the count (or list, if --verbose) of changesets that have not been deployed.
tag "Tags" the current database state for future rollback.
tag-exists Checks whether the given tag already exists.
unexpected-changesets Produces a list of changesets that were run in the database but do not exist in the current changelog.

Maintenance commands

Command Description
calculate-checksum Calculates and prints a checksum for the changeset with the specified id in the following format: filepath::id::author.
clear-checksums Removes current checksums from database. On next update changesets that have already been deployed will have their checksums recomputed, and changesets that have not been deployed will be deployed.
list-locks Lists who currently has locks on the database changelog.
release-locks Releases all locks on the database changelog.

Quality checks commands

The following commands are subcommands of the checks command. For more information, see Quality Checks. Quality checks are only available with Liquibase Pro.

Command Description

Sets all qualifying quality checks to the same value.


Copies a customizable check so that you can run the same check multiple times with different parameters. Requires the --check-name attribute.


Allows you to customize checks specified in your check configurations. Requires the --check-name attribute.


Allows you to delete a copy of a check from your checks settings. You cannot delete static checks and parent dynamic checks used to create copies of checks.


Disables a specific check provided in the --check-name attribute. The run subcommand does not evaluate disabled checks when executed.


Enables a specific check provided in the --check-name attribute. The run subcommand evaluates enabled checks when executed.


Reverts customizations made to the check indicated in the --check-name attributeto default settings. Does not affect static checks and uncustomized dynamic checks.

Note: When you reset a dynamic check that has been customized multiple times, the check reverts to its default settings, not to the previous customized settings.


Executes checks using the checks settings file and the changelog file you specify. Requires the --changelog-file attribute.


Prints the available checks and their configurations—as indicated in the checks settings file—to STDOUT.

Liquibase Hub commands

Option Description
register-changelog Connects your local Liquibase activity to a specific Liquibase Hub Project.
sync-hub Synchronizes the local DATABASECHANGELOG table with Liquibase Hub.
deactivate-changelog Removes the changelogID from your changelog file so it stops sending reports to Liquibase Hub.

Required parameters for most commands

Option Description
--changelog-file=<path and filename> The changelog file to use.
--username=<value> Database username.
--password=<value> Database password.
--url=<value> Database JDBC URL.
--driver=<jdbc.driver.ClassName> Database driver class name.

Optional parameters

Option Description
--classpath=<value> Additional JDBC Driver files that are not already in the $LIQUIBASE_HOME/lib or ./liquibase_libs directories. List multiple items using the standard classpath separator for your platform, which is a colon (:) on Mac/Linux, and a semicolon (;) on Windows.

changesets Contexts to execute.

--defaultSchemaName=<schema> Specifies the default schema to use for managed database objects and for Liquibase control tables.
--databaseClass=<custom.DatabaseImpl> Specifies a custom Database implementation to use
--defaultsFile=</path/to/file> File containing default option values. (Default is ./
--duplicateFileMode=</path/to/file> How to handle multiple files being found in the search path that have duplicate paths. Options are WARN (log warning and choose one at random) or ERROR (fail current operation).
--includeSystemClasspath=<true or false> Include the system classpath in the Liquibase classpath. (default: true)
--promptForNonLocalDatabase=<true or false> Prompt if non-localhost databases. (default: false)
--changelogParseMode=<value> Configures how to handle unknown fields in changelog files. Possible values: STRICT which causes parsing to fail, and LAX which continues with the parsing.
--currentDateTimeFunction=<value> Overrides current date time function used in SQL. Useful for unsupported databases.
--labelFilter=<value> Filter the changelog using Labels.
--license-key=<licenseKey> A Liquibase Pro license key (base64 encoded string) unlocks additional features.
--log-level=<level> Execution log level (debug, info, warning, severe, off).
--log-file=<filename> Rather than logging to console, send logging messages to a file.
--help Output command line parameter help.
--dataOutputDirectory Directory where insert statement CSV files will be kept (required by generate-changelog command).
--propertyProviderClass=<properties.ClassName> Custom properties implementation to use.
--schemas=<name1,name2> A comma-separated list of database schemas from which to include objects when executing a command, such as snapshot, generate-changelog, or diff-changelog. This flag is required when you are referencing multiple schemas in a command.
--searchPath=<value> List of base directories and locations to search for migration files. List multiple items using commas (,). The default search path includes the current working directory plus any JARs in your $LIQUIBASE_HOME/lib and ./liquibase_libs directories

Required diff parameters

Option Description
--referenceUsername=<value> Base Database username.
--referencePassword=<value> Base Database password.
--referenceUrl=<value> Base Database URL.

Optional diff parameters

Option Description
--referenceDriver=<jdbc.driver.ClassName> Base Database driver class name.
--referenceDefaultSchemaName=<schema> Base Database default schema name.

changelog properties

Option Description
-D<>=<property.value> Pass a name/value pair for substitution of ${} blocks in the changelogs.