Liquibase 4.30.0 release notes

Liquibase 4.30.0 is a major release. Liquibase 4.30.0 contains new capabilities and notable enhancements for Liquibase Open Source and Liquibase Pro users, including flow enhancements, validation improvements, clearer error messaging for thrown exceptions, the addition of Anonymous Analytics, and the deprecation of the MacOS.dmg installer in favor of installation via Homebrew.

See GitHub formatted release notes for more information. Full changelog: 4.29.2–4.30.0 (November 5, 2024)

Notable changes

Liquibase Pro

Flow enhancements: Detect pending changesets and variable variables

There are two Flow enhancements: The ability to condition action on the presence of pending changesets and the ability to use a global variable inside other global or stage variables, enabling variable variables within flows.

Learn more: Liquibase Flow Files

Liquibase Open Source and Liquibase Pro

Anonymous Analytics

  • Liquibase can now gather anonymous usage analytics when commands are run. No user-specific data will be gathered.

  • For Liquibase OSS users, this functionality is enabled by default, but can be opted out of before any data is sent. For Liquibase Pro users, this is disabled by default with the ability to opt in. You can enable or disable sending analytics with the --analytics-enabled property.

  • Gathering anonymous usage analytics allows us to better understand how a broad, diverse set of millions of users is actually using Liquibase.

Learn more: Anonymous Analytics.

Usability improvements

  • Avoid ignoring caught exceptions, and instead return the exception and append the reason for better debugging.

  • When using failOnError=false,changesets that fail will now show up in the default output.

  • When using STRICT mode, update-to-tag will now throw an error when no tag is specified or the tag does not exist.

  • Added a Customizer that allows the discovery of changesets that are not known to an application. This can prevent an application's startup when discovering new, unexpected changesets before an update is made.

Deprecated: macOS.dmg installer

The macOS dmg installer no longer ships with release artifacts. Please use the tar.gz or .zip release artifacts, or install via Homebrew by running brew install liquibase.

Liquibase Pro changelog

New features

  • DAT-18202: Implement wildcard check name argument for enable/disable in #2000 by @wwillard7800

  • DAT-17058: Added analytics in #1995 by @liquibot

  • DAT-17568: Added exit command action in #1689 by @wwillard7800

  • DAT-18689: Added extra information to failed changesets summary in #1996 by @filipelautert

  • DAT-18114: Added more logging for formatted SQL parsing in #1994 by @wwillard7800

  • DAT-18455: Added SQL file path to policy checks output in #1944 by @wwillard7800

Changes

  • DAT-17581: Exit with a non-zero if the changelog did not validate in #1870 by @wwillard7800

  • DAT-18540: Create new ReportWriter.open(String path) method that defaults to no-op in #1962 by @wwillard7800

  • DAT-18092: Use xdg-open to open reports in a browser on Linux operating systems in #1948 by @abrackx

  • DAT-18531: Clear out DBCL fast check cache before each Flow action in #1933 by @wwillard7800

  • DAT-18362: Handle comments when parsing include/includeAll statements in #1959 by @wwillard7800

  • DAT-18463: Implement a class to be used to capture the start/end positions of a regex check for line number output in #1979 by @wwillard7800

  • DAT-18869: Obfuscate IO arguments in #1999 by @abrackx

Bug fixes

  • DAT-18819: Fix dropall behavior with Snowflake in #1987 by @abrackx

  • DAT-18517: Handle the expansion of variables when default values are involved in #1969 by @wwillard7800

  • DAT-18327: Improve startup performance in #1972 by @StevenMassaro

  • Fix tests to use the new CommandFactory.reset() method in #1952 by @wwillard7800

Security, driver, and other updates

  • (#1973) Bump com.fasterxml.jackson.module:jackson-module-jaxb-annotations from 2.17.2 to 2.18.0 by dependabot

  • (#1974) Bump com.fasterxml.jackson.core:jackson-annotations from 2.17.2 to 2.18.0 by dependabot

  • (#1976) Bump com.fasterxml.jackson.core:jackson-databind from 2.17.2 to 2.18.0 by dependabot

  • (#1975) Bump com.fasterxml.jackson.core:jackson-core from 2.17.2 to 2.18.0 by dependabot

  • (#1988) Bump org.apache.maven.plugins:maven-failsafe-plugin from 2.22.2 to 3.5.1 by dependabot

  • (#1991) Bump org.apache.maven.plugins:maven-surefire-plugin from 2.22.2 to 3.5.1 by dependabot

  • (#2003) Bump org.junit.vintage:junit-vintage-engine from 5.10.3 to 5.11.3 by dependabot

  • (#2002) Bump org.junit:junit-bom from 5.10.3 to 5.11.3 by dependabot

  • (#1963) Bump com.networknt:json-schema-validator from 1.5.0 to 1.5.2 by dependabot

  • (#1947) Bump org.yaml:snakeyaml from 2.2 to 2.3 by dependabot

  • (#1984) Bump org.codehaus.gmavenplus:gmavenplus-plugin from 1.13.1 to 4.0.1 by dependabot

  • (#2005) Bump org.nanohttpd:nanohttpd from 2.2.0 to 2.3.1 by dependabot

Liquibase Open Source and Liquibase Pro changelog

New features

  • (#6414) When using failOnError=false, changesets that failed will now show up in the default output. @filipelautert

  • (#6413) Ensure all failed changesets show in the exceptionChangesets. Previously, output summaries did not include changesets that failed when running failOnError=false (DAT-18689). @filipelautert

  • (#6169) When using STRICT mode, update-to-tag will now throw an error when no tag is specified or the tag does not exist. @MalloD12

  • (#6410) Modified clob handling in loadData by checking the string passed to a CLOB type column.@tati-qalified

  • (#6432) Added a Customizer that allows the discovery of changesets that are not known to an application. This can be used to prevent an application's startup when discovering new, unexpected changesets before an update is made. @raphw

  • (#6288) Avoid ignoring caught exceptions, and instead return the exception and append the reason for better debugging. @asolntsev

  • (#6265) Enhanced include and includeAll to support logicalFilePath (DAT-18350). @wwillard7800

  • (#6300) Add method to reset the command definitions cache in CommandFactory for testing. @wwillard7800

  • (#6280) Undeprecated StringUtil class (DAT-18538). @MalloD12

  • (#5223) Improved empty check style by using isEmpty string method. @MalloD12

  • (#6067) Added additional modes for duplicateFileMode. @k4pran

    • INFO- Logs when duplicate changelog files are found at the INFO level

    • DEBUG- Logs when duplicate changelog files are found at the FINE level

    • SILENT- Does not log when duplicate changelog files are detected

BigQuery

  • (#6294) Suppress UnsupportedClassVersionErrors for BigQuery at info level (DAT-18534). @filipelautert

Databricks

  • (#6263) Fix generated column value for Databricks (DAT-18148). @filipelautert

Maven

  • (#6129) Support Hashicorp Vault settings in the Maven Plugin POM. @wwillard7800

MSSQL

  • (#6138) Added support for include columns in indexes. @stephenatwell

PostgreSQL

  • (#6402) Added pg_stat_statements and pg_stat_statements_info views to the list of system tables and views to prevent them from being dropped. @rozenshteyn

  • (#6211) Updated PostgreSQL database major and minor versions. @MalloD12

Bug fixes

  • (#6266) Fix CustomTaskRollback rollback bug where it was being called twice. @momosetkn

  • (#6205) Removed usage of the deprecated isEmpty() method. @anton-erofeev

  • (#6366) Improve startup performance (DAT-18327). @StevenMassaro

  • (#6407) Added filterable flag to ChangeLogParameter class (DAT-18811). @abrackx

  • (#6416) When determining the schema name, ensure a value was found (DAT-18673). @abrackx

  • (#6418) Fix issue where context filters with @ symbols were not being executed properly (DAT-18843). @abrackx

  • (#6406) Test assertion code modification. (DAT-17568). @wwillard7800

  • (#6429) Check that the getPriority method is correct for snapshot generators (DAT-18730). @StevenMassaro

  • (#6417) Revert "Remove unneeded inclusion of commons-io in liquibase-core pom.xml". @catull

  • (#6385) Do not check for nested database objects when using foreignKeyConstraintExists precondition (DAT-18624). @abrackx

  • (#5894) Do not strip "classpath:" when normalizing the path. @andrus

  • (#6359) Fix the issue where a changeset with a blank ID is allowed to run (DAT-18687). @wwillard7800

  • (#6109) Fix classpath loading and incorrect configuration for addForeignKeyConstraint (DAT-18191 and DAT-18192). @filipelautert

  • (#6287) Fix NPE when the default value is null. @asolntsev

  • (#6330) Unhide tag parameter for UpdateTestingRollback command (DAT-18563). @MalloD12

  • (#6375) Initialize the member variable in method to fix tests. @wwillard7800

  • (#6358) Make global argument definitions static so that they are visible across all threads. @StevenMassaro

  • (#6309) Fix Locale test. @filipelautert

  • (#6463) Fix flaky test (DAT-18921). @abrackx

  • (#4668) Expanded variables in the --sql argument to executeSql so that variables can be substituted in execute-sql --sql-file command. @wwillard7800

  • (#6222) Fix: Handle command arguments static behavior. Liquibase CLI programmatically can now be called multiple times from different threads. @filipelautert

  • (#6286) Append the cause of the problem to the thrown exception for better debugging. @asolntsev

  • (#6187) Update JdbcDatabaseSnapshot.java. @bmoers

  • (#6409) Added more logging (DAT-18114). @wwillard7800

  • (#6165) Fix splitting SQL statements containing @begin or #begin. @chrstnbrn. @begin is now returned as one token instead of two tokens (@ and begin). Same for #begin. This way, the logic in processMultiLineSQL that looks for BEGIN does not apply to it, and SQL containing @begin or begin is correctly split into multiple statements.

MariaDB

  • (#6241) Verify the existence of the lock table to remove 'table does not exist' error messages. @wwillard7800

Maven

  • (#6339) Added filter to the command scope so include/excludeObjects parameters get properly applied. @Evan-Christensen

  • (#6332) Updated project variables used in Maven configuration to reduce build warnings. @catull

MySQL

  • (#6128) 'MANUAL' MySQL reserved word added. @MalloD12

Oracle

  • (#6305) Allow generateChangelog to run against Oracle databases with blank schema names (DAT-18199). @wwillard7800

PostgreSQL

  • (#6350) Allow replaceIfExists in Postgres procedures (DAT-18495). @StevenMassaro

SQLite

  • (#6341) Fix sqlite hsqldb and environment variable tests (DAT-18646). @abrackx

Snowflake

  • (#6391) Handle Snowflake add NOT NULL constraint (DAT-18798). @wwillard7800

  • (#6308) Handle offline connection for Snowflake during diff (DAT-18652). @wwillard7800

Spring

  • (#6345) When using the default schema for MultiTenantSpringLiquibase, the log level is now info instead of warning. @deblockt

  • (#6261) Fix: Do not throw an unchecked exception for SpringBoot. @filipelautert

Security, driver, and other updates

  • (#6457) Update jreBundle to latest in install4j @abrackx

  • (#6377) Bump org.testcontainers:testcontainers-bom from 1.20.1 to 1.20.2 @dependabot

  • (#6443) Bump org.junit.platform:junit-platform-suite from 1.11.0 to 1.11.3 @dependabot

  • (#6384) Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.10.0 to 3.10.1 @dependabot

  • (#6387) Bump org.codehaus.gmavenplus:gmavenplus-plugin from 3.0.2 to 4.0.1 @dependabot

  • (#6400) Bump org.apache.maven.plugins:maven-surefire-plugin from 3.5.0 to 3.5.1 @dependabot

  • (#6445) Bump org.junit.jupiter:junit-jupiter from 5.11.0 to 5.11.3 @dependabot

  • (#6408) Bump actions/cache from 4.0.2 to 4.1.1 @dependabot

  • (#6444) Bump junit-jupiter.version from 5.11.0 to 5.11.3 @dependabot

  • (#6401) Bump org.apache.maven.plugins:maven-failsafe-plugin from 3.5.0 to 3.5.1 @dependabot

  • (#6399) Bump codex-/return-dispatch from 1 to 2 @dependabot

  • (#6368) Bump org.xerial:sqlite-jdbc from 3.46.1.0 to 3.46.1.3 @dependabot

  • (#6319) Bump groovy.version from 4.0.22 to 4.0.23 @dependabot

  • (#6337) Bump commons-io:commons-io from 2.16.1 to 2.17.0 @dependabot

  • (#6290) Bump org.yaml:snakeyaml from 2.2 to 2.3 @dependabot

  • (#6274) Bump org.jboss.weld.se:weld-se-core from 5.1.2.Final to 5.1.3.Final @dependabot

  • (#6276) Bump org.apache.maven.plugins:maven-surefire-plugin from 3.3.1 to 3.5.0 @dependabot

  • (#6275) Bump org.apache.maven.plugins:maven-failsafe-plugin from 3.3.1 to 3.5.0 @dependabot

  • (#6273) Bump org.apache.maven.plugins:maven-plugin-plugin from 3.13.1 to 3.15.0 @dependabot

  • (#6284) Bump actions/setup-python from 5.1.1 to 5.2.0 @dependabot

  • (#6282) Bump ant.version from 1.10.14 to 1.10.15 @dependabot

  • (#6283) Bump org.apache.commons:commons-lang3 from 3.16.0 to 3.17.0 @dependabot

  • (#6272) Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.8.0 to 3.10.0 @dependabot

  • (#6247) Bump com.microsoft.sqlserver:mssql-jdbc from 12.6.1.jre8 to 12.8.1.jre8 @dependabot

  • (#6246) Bump org.postgresql:postgresql from 42.7.3 to 42.7.4 @dependabot

  • (#6221) Bump org.xerial:sqlite-jdbc from 3.46.0.0 to 3.46.1.0 @dependabot

  • (#6220) Bump org.apache.maven.plugins:maven-install-plugin from 3.1.2 to 3.1.3 @dependabot

  • (#6219) Bump org.apache.maven.plugins:maven-deploy-plugin from 3.1.2 to 3.1.3 @dependabot

  • (#6213) Bump targetMavenVersion from 3.9.8 to 3.9.9 @dependabot

  • (#6202) Bump org.junit.jupiter:junit-jupiter from 5.10.3 to 5.11.0 @dependabot

  • (#6201) Bump org.junit.platform:junit-platform-suite from 1.10.3 to 1.11.0 @dependabot

  • (#6200) Bump spring.version from 5.3.37 to 5.3.39 @dependabot

  • (#6245) Bump actions/delete-package-versions from 3 to 5 @dependabot

  • (#6199) Bump junit-jupiter.version from 5.10.3 to 5.11.0 @dependabot