Release Notes
Liquibase 4.22.0 – May 11, 2023
Note: We have removed the 4.22.0 release of Liquibase. This version contains an updated algorithm for determining which changes Liquibase needs to deploy to a database. In some situations, the conversion to this new algorithm could result in eligible changes not being deployed to a target database.
Specifically, currently undeployed changesets with the runOnChange=true
attribute may not be deployed if they were present in the first execution of Liquibase 4.22.0 against a given target database. If you have not upgraded to Liquibase 4.22.0, you are not impacted by this issue, or if you do not rely on runOnChange
changesets which have changed before your upgrade.
We will soon provide more guidance on how to assess and remedy any potential impact for users who have already upgraded to Liquibase 4.22.0. If you are a Liquibase customer and believe you may be impacted by this issue, please open a ticket in our support portal at https://support.liquibase.com
Liquibase v4.22.0 is a major release
Full Changelog: v4.21.1...v4.22.0
Notable Changes
The checksum changes in Liquibase version 4.22.0 a major change, which improves whitespace handling in views, procedures, Liquibase Pro stored logic objects, and more. New checksums are silently recalculated upon the initial run of Liquibase 4.22.0 or greater.
No actions is required for the vast majority of users. However, for users who rely on the detection of a changed changeset or have complex workflows, it is recommended that you run liquibase clear-checksums
with your current version BEFORE your first operation using the new 4.22.0 version against a database. Learn more at Changeset Checksums.
API Breaking Changes
- DAT-13285 - Fix CheckSum generation issues + improvement by @filipelautert in #3914
Enhancements
- Improve
liquibase-core
pom.xml
handling (DAT-14546) by @nvoxland in #4169 - DAT-14367 by @sayaliM0412 in #4186
- New test fixes by @wwillard7800 in #4199
- Update
release-published.yml
by @jnewton03 in #4206 - Adding support for Postgresql-generated columns. by @filipelautert in #4185
- update changelog to 4.22 by @suryaaki2 in #4231
- [Pro] DAT-13972: add
rollback-on-error
ability and its MDC toupdate-one-changeset
command by @StevenMassaro in liquibase/liquibase-pro#934 - [Pro] update
pom.xml
by @sayaliM0412 in liquibase/liquibase-pro#929 - [Pro] MDC for
update-testing-rollback
by @StevenMassaro in liquibase/liquibase-pro#943 - [Pro] update pro key for test by @StevenMassaro in liquibase/liquibase-pro#962
- [Pro] DAT-12568 pro license key automation by @jnewton03 in liquibase/liquibase-pro#966
- [Pro] DAT- 13285:: Update stored logic checksum logic to match new OSS checksum logic for procedures by @MalloD12 in liquibase/liquibase-pro#931
- [Pro] DAT-14674: add help test for pro side by @StevenMassaro in liquibase/liquibase-pro#965
- [Pro] update pro xsd and schema to 4.22 by @suryaaki2 in liquibase/liquibase-pro#971
Security, Driver, and other updates
- Bump
maven-surefire-plugin
from 2.22.2 to 3.0.0 by @filipelautert in #4113 - Bump
maven-enforcer-plugin
from 3.2.1 to 3.3.0 by @dependabot in #4081 - Bump
jacoco-maven-plugin
from 0.8.8 to 0.8.10 by @dependabot in #4174 - Bump
flatten-maven-plugin
from 1.3.0 to 1.4.1 by @dependabot in #4036 - [Pro] Bump
logback-classic
from 1.4.6 to 1.4.7 by @dependabot in liquibase/liquibase-pro#947 - [Pro] Bump
jackson-core
from 2.14.2 to 2.15.0 by @dependabot in liquibase/liquibase-pro#949 - [Pro] Bump
jackson-annotations
from 2.14.2 to 2.15.0 by @dependabot in liquibase/liquibase-pro#950 - [Pro] Bump
jackson-module-jaxb-annotations
from 2.14.2 to 2.15.0 by @dependabot in liquibase/liquibase-pro#951 - [Pro] Bump
jackson-dataformat-yaml
from 2.14.2 to 2.15.0 by @dependabot in liquibase/liquibase-pro#953 - [Pro] Bump
jacoco-maven-plugin
from 0.8.9 to 0.8.10 by @dependabot in liquibase/liquibase-pro#955
Fixes
- Fixed #3487 Provide precision and scale for currency database datatype and H2. by @jccampanero in #4019
- Fix search path handle for PostgreSQL with JDBC connection with specified schema by @quonas in #4021
- Fixes undesired change to
CreateProcedureChange
checksum generation by @filipelautert in #4161 - Fixed #3722 auto-increment column starting with a custom value no longer works with H2 v1 by @quonas in #4013
- Fix
addDefaultValue
checksum calculation when providing schema name by @filipelautert in #4203 - Fix flaky Postgres tests by @abrackx in #4234
- Move
dbchangelog-4.21.xsd
toliquibase-standard
by @nvoxland in #4176 - include changelog file when running
status
command from Liquibase class (DAT-14659) by @StevenMassaro in #4201 - Always use
LockService
from Factory when running command steps by @filipelautert in #4151 - SnowflakeDatabase allows catalog name in identifiers in #4092
- Change the case of
sys.extended_properties
. by @jccampanero in #4101 - Load properties from
defaults-file
fixing variable replacement for refactored commands by @filipelautert in #4204 - remove helper commands from help output (DAT-14674) by @StevenMassaro in #4207
- [Pro] DAT-13953: fix integration name log message for native tools by @StevenMassaro in liquibase/liquibase-pro#937
- [Pro] Fix tests because of output change from Postgres 9.6 to 15. by @filipelautert in liquibase/liquibase-pro#970
- [Pro] DAT-14642 - Fix
Update-one-changeset
problem that shows up during checksum upgrade by @filipelautert in liquibase/liquibase-pro#968 - [Pro] DAT-14177: add
changesetsRolledback
for failedrollback-on-error
rollback by @StevenMassaro in liquibase/liquibase-pro#932
New Contributors
- @sayaliM0412 made their first contribution in liquibase/liquibase-pro#929
- @MalloD12 made their first contribution in liquibase/liquibase-pro#931
- @jccampanero made their first contribution in #4019
Get Certified
Learn all the Liquibase fundamentals from free online courses by Liquibase experts and see how to apply them in the real world at https://learn.liquibase.com/.
Read the Documentation
Please check out and contribute to the continually improving docs, now at https://docs.liquibase.com/.
Meet the Community
Our community has built a lot. From extensions to integrations, you’ve helped make Liquibase the amazing open source project that it is today. Keep contributing to making it stronger:
- Contribute code
- Make doc updates
- Help by asking and answering questions
- Set up a chat with the Product team
Thanks to everyone who helps make the Liquibase community strong!
File Descriptions
- Liquibase CLI – Includes open-source and commercial functionality:
liquibase-<version>.tar.gz
– Archive in tar.gz formatliquibase-<version>.zip
– Archive in ZIP formatliquibase-windows-x64-installer-<version>.exe
– Installer for Windowsliquibase-macos-installer-<version>.dmg
– Installer for macOS
- Primary libraries – For embedding in other software:
liquibase-core-<version>.jar
– Base Liquibase library (open source)liquibase-commerical-<version>.jar
– Additional commercial functionality
Note:
liquibase-core-<version>.jar
contains only the open-source license. If you use Liquibase Pro or other commercial add-ons, you must also installliquibase-commercial-<version>.jar
. liquibase-additional-<version>.zip
– Contains additional, less commonly used files:- Additional libraries such as
liquibase-maven-plugin.jar
andliquibase-cdi.jar
- Javadocs for all the libraries
- Source archives for all the open source libraries
- ASC/MD5/SHA1 verification hashes for all files
- Additional libraries such as
- Source code (zip) – ZIP archive of this repository's source code
- Source code (tar.gz) – Tar.gz archive of this repository's source code

Liquibase 4.21.1 is a patch release
Full Changelog: v4.21.0...v4.21.1
Notable Changes
[PRO] Observability Initiative - Structured Logging
Structured Logging makes Liquibase operation data easily available for automated monitoring and analysis tools to read, query, and act upon in automated workflows. This feature significantly improves the way Liquibase logs its actions and events to make records machine-readable, easily-ingested, and queryable by industry-standard observability and analysis tools. Learn more at Structured Logging.
What's Changed
- DAT-14365: unhide log-format parameter by @StevenMassaro in #4120
- updated changelog txt to 4.21 by @suryaaki2 in #4121
- remove Hub mention from readme by @mariochampion in #4127
- Add missing parameter
changeLogFile
toupdate
command when running from Main by @filipelautert in #4126
New Contributors
- @mariochampion made their first contribution in #4127

Liquibase v4.21.0 is a major release
Full Changelog: v4.20.0...v4.21.0
Notable Changes
[PRO] Observability Initiative - Structured Logging
Structured Logging makes Liquibase operation data easily available for automated monitoring and analysis tools to read, query, and act upon in automated workflows. This feature significantly improves the way Liquibase logs its actions and events to make records machine-readable, easily-ingested, and queryable by industry-standard observability and analysis tools. Learn more at Structured Logging.
Command refactoring
- Refactor
update-to-tag
command step (DAT-6641) by @StevenMassaro in #3916 - Refactor
update-to-tag-SQL
command step (DAT-6642) by @StevenMassaro in #3917 - Refactor
Rollback
andRollbackSQL
command by @filipelautert in #3991 - Refactor
ListLocksCommand
by @filipelautert in #3952 - Refactor
ReleaseLocksCommand
by @filipelautert in #3953 - Refactoring of
rollbackCount[SQL]
commands by @filipelautert in #4077 - Refactor
update
,updateSql
,updateCount
,updateCountSql
to use Command framework (DAT-6600/DAT-6601) by @abrackx in #3866 - Refactor
update
to use command framework DAT-6600 by @abrackx in #849
Enhancements
- [PRO] New
runWithSpoolFile
attribute forrunWith
changesets DAT-12881 by @wwillard7800 in #3864 - New update summary output table for update commands DAT-13182 by @wwillard7800 in #3812
Security, Driver and other updates
- [PRO] Bump
logback-classic
from 1.4.5 to 1.4.6 by @dependabot in #884 - [PRO] Bump
flatten-maven-plugin
from 1.3.0 to 1.4.0 by @dependabot in #893 - [PRO] Bump
postgresql
from 42.5.4 to 42.6.0 by @dependabot in #892 - [PRO] Bump
jacoco-maven-plugin
from 0.8.8 to 0.8.9 by @dependabot in #925 - [PRO] Snakeyaml 2.0 by @filipelautert in #858
- Bump
targetMavenVersion
from 3.8.7 to 3.9.0 by @dependabot in #3785 - Bump
actions/cache
from 3.2.6 to 3.3.0 by @dependabot in #3936 - Bump
maven-plugin-plugin
from 3.7.1 to 3.8.1 by @dependabot in #3871 - Bump
maven-compiler-plugin
from 3.10.1 to 3.11.0 by @dependabot in #3870 - Bump
snowflake-jdbc
from 3.13.27 to 3.13.28 by @dependabot in #3863 - Bump
sqlite-jdbc
from 3.40.1.0 to 3.41.0.0 by @dependabot in #3862 - Bump
maven-assembly-plugin
from 3.4.2 to 3.5.0 by @dependabot in #3 - Bump
snowflake-jdbc
from 3.13.28 to 3.13.29 by @dependabot in #3981 - Bump
postgresql
from 42.5.4 to 42.6.0 by @dependabot in #3982 - Bump
maven-resources-plugin
from 3.3.0 to 3.3.1 by @dependabot in #4025 - Bump
mariadb-java-client
from 3.1.2 to 3.1.3 by @dependabot in #4006 - Bump
slf4j-jdk14
from 2.0.6 to 2.0.7 by @dependabot in #3979 - Bump
targetMavenVersion
from 3.9.0 to 3.9.1 by @dependabot in #3980 - Bump
actions/cache
from 3.3.0 to 3.3.1 by @dependabot in #3948 - Bump
maven-deploy-plugin
from 3.1.0 to 3.1.1 by @dependabot in #4026 - Bump
maven-install-plugin
from 3.1.0 to 3.1.1 by @dependabot in #4027 - Bump
sqlite-jdbc
from 3.41.0.0 to 3.41.2.1 by @dependabot in #4028 - Upgrade
maven-javadoc-plugin
version to 3.5.0 by @MalloD12 in #3972 - Release
liquibase-cdi-jakarta
to maven repositories by @DCCSKrezovic in #4001 - Upgrade spring 5 version by @filipelautert in #4015
- Snakeyaml 2.0 by @filipelautert in #3893
- Upgrade AdoptOpenJDK bundled in the JVM installer to version 17.0.6+10 by @MalloD12 in #3900
Fixes
- [PRO] DAT-12881 Implement
runWithSpoolFile
attribute andcreateSpool
property to control use of Oracle spooling by @wwillard7800 in #843 - [PRO] DAT-12814: '
--rollback-on-error
' should returnERROR
and return code 1 when update fails by @StevenMassaro in #905 - [PRO] DAT-13968 Added missing overwrite property by @wwillard7800 in #895
- [PRO] DAT-13667 Make sure exception from SQLCMD is propagated back to be displayed by @wwillard7800 in #902
- [PRO] DAT-14096 Handle existence of a file extension when creating spool/sql/log files by @wwillard7800 in #913
- [PRO] DAT-13994: strip leading slashes from contexts by @StevenMassaro in #921
ChangelogSync
family to CommandStep refactoring by @filipelautert in #3859- Improved concurrency support in ReflectionSerializer by @Dasiu in #3840
- Make Pattern instance variables and avoid recalculating each time by @arturobernalg in #3656
- Java 8 improvements by @arturobernalg in #3712
- Map 'double' to SQL type 'DOUBLE PRECISION' for an Oracle database (CORE-3165) by @maartenc in #3707
- Rollback Snakeyaml default config to allow duplicate keys by @filipelautert in #3939
- Upgrades snakeyaml for installer by @filipelautert in #3943
- DAT-12842 by @sayaliM0412 in #3909
- Improve use of generics in code by @arturobernalg in #3797
- DAT-12842 by @sayaliM0412 in #3963
- Performance Improvement: optimized
DatabaseChangeLog.normalizePath()
by @nvoxland in #3853 - Clear entries from MDC map on scope exit by @amrasarfeiniel in #3927
- [3910] fix missing OSGI manifest entries for service loaders by @jherkel in #3912
- Fixes #3734 MySQL ENUM and SET column type by @nwcm in #3842
- Change
Index.setTable
method to take a Relation parameter DAT-13676 by @wwillard7800 in #3987 - only set the execType to
RERAN
, if the changeset was actually executed by @AlexGruebel in #3926 - Create the change exec listener earlier so that it is available if there is an exception DAT-13939 by @wwillard7800 in #3954
- [3906] Don't break Liquibase if a resolveable hostname is not found by @filipelautert in #3960
- Rename
ON_MISSING_INCLUDE_FILE
configuration and property names by @MalloD12 in #3899 - Load XSD files under OSGI by @ponziani in #3378
- Fixes #3083 MySQL JSON length issue by @nwcm in #3849
- Prevention of NullpointerException (unboxing) in
generate-changelog
with MS SQL Server by @barthel in #3903 - Issue 3619 - Allow control of recursion for
includeAll
viaminDepth
andmaxDepth
attributes by @jasonlyle88 in #3620 - Avoid String concatenation in loop. by @arturobernalg in #3668
- fix
NullPointerException
inResourceAccessor
by @StevenMassaro in #4040 - Lowers message log level. by @filipelautert in #4046
- Remove potentially sensitive information from
--monitor-performance
by @nvoxland in #3640 - Add
mirror-console-messages-to-log
parameter (DAT-13802) by @abrackx in #4032 - Do not ignore
DatabaseException
for Snowflake by @filipelautert in #4034 - Fix
DB-Doc
generation of Unique Constraints for Sybase ASE database. by @crenan in #3911 - Lowers Snakeyaml log level for warning stack traces by @filipelautert in #4062
- Remove unused parameters and local variables by @arturobernalg in #3857
- Do not show update summary for
updateCountSql
orupdateTagSql
DAT-14107 by @wwillard7800 in #4060 - add additional information to
toString
/describe
methods of SQLFileChange (DAT-13789) by @StevenMassaro in #4059 - Update
ShowSummar
y argument reference fromCommandUtil
class to fix failing integration tests by @MalloD12 in #4073 - strip leading slashes from contexts (DAT-13994) by @StevenMassaro in #4071
- Appends the table type to the statement using it. by @filipelautert in #4000
- Update runner image for pr builds (DAT-14192) by @abrackx in #4094
- Do not allow custom change types to execute twice DAT-14051 by @wwillard7800 in #4054
- Disables buffered log service if not using hub by @filipelautert in #3969
- Fixes
UnsupportedOperationException
thrown inSpringResourceAccessor
in Spring Boot 3 Native Image by @justin-tay in #3959 - Do not repeat MDC logging by @filipelautert in #4088
- Implement
Strict
global configuration support to control whether non-emptyauthor
attribute is allowed or not by @MalloD12 in #4044 - Read Snowflake views definitions with the Snowflake-specific query by @LonwoLonwo in #3794
- Fixed #3745 error generation intType when using
autoIncrement=true
with H2 V2 by @quonas in #4008 - log generated
databasechangelogsql
without erroneously incrementing the order executed by 2 (DAT-13680) by @StevenMassaro in #4097 - Remove native executor name property (DAT-13580) by @abrackx in #4108
New Contributors
- @maartenc made their first contribution in #3707
- @amrasarfeiniel made their first contribution in #3927
- @nwcm made their first contribution in #3842
- @AlexGruebel made their first contribution in #3926
- @ponziani made their first contribution in #3378
- @barthel made their first contribution in #3903
- @DCCSKrezovic made their first contribution in #4001
- @justin-tay made their first contribution in #3959
- @quonas made their first contribution in #4008

Liquibase v4.20.0 is a patch release
Full Changelog: v4.19.1...v4.20.0
API Breaking Changes
- DAT-6606, DAT-6607 (DAT-6623 too) and DAT-6613 by @filipelautert in #3775
- remove Liquibase Hub autoregistration prompts and no longer support new Liquibase Hub registrations (DAT-13419) by @StevenMassaro in #3886
Enhancements
- Automate deployment of XSDs to new beta landing site by @sayaliM0412 in #3867
- Issue 3584: Add support for
relativeToChangelogFile
forChangeLogProperty
class/property attribute by @jasonlyle88 in #3595 - Jakartaee CDI for liquibase by @xazap in #3642
- use variable for maven version by @StevenMassaro in #3895
- more maven version pinning by @StevenMassaro in #3887
- update db changelog xsd to 4.20 by @suryaaki2 in #3918
- [PRO] DAT-6606, DAT-6607 and DAT-6613 by @filipelautert in liquibase/liquibase-pro#824
- [PRO] update pro xsd and flow schema to 4.20 by @suryaaki2 in liquibase/liquibase-pro#861
Security, Driver and other updates
- Bump
actions/cache
from 3.2.5 to 3.2.6 by @dependabot in #3851 - [PRO] Bump
jsqlparser
from 4.5 to 4.6 by @dependabot in liquibase/liquibase-pro#842 - [PRO] Bump
mockito-core
from 3.8.0 to 3.12.4 by @dependabot in liquibase/liquibase-pro#845 - [PRO] Bump
actions/checkout
from 2 to 3 by @dependabot in liquibase/liquibase-pro#846 - [PRO] Bump
actions/setup-java
from 2 to 3 by @dependabot in liquibase/liquibase-pro#847 - [PRO] Bump
schdck/create-env-json
from 1 to 2 by @dependabot in liquibase/liquibase-pro#848 - [PRO] Bump
maven-compiler-plugin
from 3.10.1 to 3.11.0 by @dependabot in liquibase/liquibase-pro#850
Fixes
- Safely call snakeyaml methods that have been changed in last versions. by @filipelautert in #3904
- Only show structured log license message after value providers are registered (DAT-13362) by @StevenMassaro in #3850
- Pin maven version for sonar scan by @StevenMassaro in #3880
- Fix CheckSum generation issues + improvements by @MalloD12 in #3616
- Structured logging MdcKey renaming by @StevenMassaro in #3875
- Revert "Fix CheckSum generation issues + CURRENT_CHECKSUM_ALGORITHM_VERSION updated from 8 to 9." by @filipelautert in #3892
- [PRO] only show structured log license message after value providers are registered (DAT-13362) by @StevenMassaro in liquibase/liquibase-pro#839
- [PRO] Pin maven to 3.8.7 by @wwillard7800 in liquibase/liquibase-pro#855
- [PRO] GitHub action maven version pin by @StevenMassaro in liquibase/liquibase-pro#859
New Contributors

Liquibase v4.19.1 is a patch release.
Full changelog: v4.19.0...v4.19.1
Enhancements
- Publish
liquibase-extension-testing
to github packages (DAT-12833) by @abrackx in #3697 - Add support for multiple schemas to
dbDoc
command by @zpanderson in #1834 - No need redundant conditions. by @arturobernalg in #3553
- Replace expressions with type arguments with diamond type
<>
. by @arturobernalg in #3591 - Remove duplicate conditions in expressions and branches of if statements. They are used due to oversight. by @arturobernalg in #3548
- Replace constant charset String literal with the predefined StandardC… by @arturobernalg in #3568
- Normalize path of SQL changelog file when parsing (DAT-11891) by @StevenMassaro in #3664
- Delegate changeset equality tests by @droy-sandbox in #3550
- (DAT-6636) Refactor of
TagExistsCommandStep
and extraction of code to newLockServiceCommandStep
by @filipelautert in #3667 - Refactors
CalculateChecksumCommandStep
by @filipelautert in #3696 - CORE-3044 avoid locking if no updates pending by @RichardBradley in #2190
- Warning in case of missing Liquibase files instead of throwing an exception by @mhewedy in #3081
- Remove redundant modifiers. by @arturobernalg in #3594
- Update
maven-bundle-plugin
instructions to export package containing XSD files by @GeertZondervan in #3597 - Remove redundant conditions that covered by a subsequent condition. by @arturobernalg in #3590
- Add support for db2 view comments (DAT-12529) by @abrackx in #3723
- Remove unnecessary cast expressions. by @arturobernalg in #3670
- Performance improvements by @filipelautert in #3588
- Implemented a summary of change sets which get filtered out during update (DAT-12068) by @wwillard7800 in #3730
- Support tabular format for history command by @fbiville in #3541
- Remove Unnecessary operation/modifier: by @arturobernalg in #3657
- Update and rename
bug_report.md
tobug_report.yaml
by @kevin-atx in #3728 - Improve command line help message format by @StevenMassaro in #3829
- Use
StandardCharsets
constant instead. (DAT-12853) by @arturobernalg in #3725 - Update SnakeYAML usage - do not call deprecated methods by @asomov in #3632
- Avoid global mutable state of Non-final fields in enumeration types. by @arturobernalg in #3727
- Use constants instead of arrays with known lengths of zero by @arturobernalg in #3716
- Simplify lambda expressions when possible by @arturobernalg in #3736
- [PRO] Added new
modifyChangeSets
tag to support specification ofrunWith
attribute for all change sets ininclude
orincludeAll
- [PRO] DAT-7922 Implement a check for one change per changeset by @wwillard7800 in liquibase/liquibase-pro#790
- [PRO] DAT-11915 Correctly escape SQL to enable and disable triggers on PostgreSQL by @wwillard7800 in liquibase/liquibase-pro#799
- [PRO] DAT-10157: add database scope for reserved words checks by @StevenMassaro in liquibase/liquibase-pro#802
- [PRO] DAT-13189 safely set code point limit for SnakeYaml by @StevenMassaro in liquibase/liquibase-pro#827
- [PRO] DAT-13440: show
changesetsRolledback
only after rollback is complete by @StevenMassaro in liquibase/liquibase-pro#838 - [PRO] DAT-12568 by @jnewton03 in liquibase/liquibase-pro#844
Fixes
- Fixes
generate-changelog
table/view comment and table/view column comment generation for MSSQL (DAT-12045) by @abrackx in #3563 - Fully qualified path to the changelog or snapshot in S3 is not allowed, so needs better msg (DAT-11478) by @diadiushko in #3564
- (DAT-12039) :detect circular references in
includeAll
statement by @StevenMassaro in #3695 - Improve logging around paths that do not exist (DAT-12038) by @StevenMassaro in #3669
- Normalize path of JSON and YAML changelogs when parsing (DAT-11891) by @StevenMassaro in #3711
- Deprecate
DefaultLoggerConfiguration
(DAT-11970) by @StevenMassaro in #3706 - Rework
dropProcedure
for Snowflake Log message whendropAll
fails (DAT-12916) by @wwillard7800 in #3702 - Fix: Snowflake has wrong priority by @Yogurt-lei in #3572
- Do not add default schema name to
getSchemas
method to avoid one schema by @LonwoLonwo in #3704 - #3035 add Double data type class to avoid incorrect
double(0)
database by @LonwoLonwo in #3703 - Stop publishing
liquibase-extension-testing
to Github on branch builds (DAT-13038) by @abrackx in #3726 - Do not support setting column comments on a view in Snowflake (DAT-12530) by @StevenMassaro in #3710
- Fix
NullPointerException
for case sensitive collations by @ivan909020 in #3699 - (DAT-13269) pass proper branch name and add required field by @jnewton03 in #3765
- Consistent ARG-suffix for '
defaultSchemaName
'-Parameter by @SIEDA-EliasHeydrich in #3662 - Removing explicit
LiquibaseServletListener
references by @Thunderforge in #3677 - Add Snowflake structured data types to unmodifiable Data Types by @LonwoLonwo in #3752
- Fix #3690
primaryKeyExists
does not work on DB2z by @MichaelKern-IVV in #3691 - Replace old stream creation with java.nio. by @arturobernalg in #3686
github-action
(DAT-13527) by @jnewton03 in #3827- Do not duplicate
clearCheckSums
logic by @fbiville in #3628 - Fixing #3708 -
AddColumn
fix for H2 version 1.4.200 by @KarolyNevelos in #3709 - Added default values to private Scope constructor by @MarkTJohnson in #3756
- Improved concurrency support by using
ConcurrentHashMaps
by @jurgenkleverwal in #3799 - Fixing lookahead for last line comment method by @mwiede in #3717
- Do not calculate checksum when loading changelogs by @filipelautert in #3790
- Set up maven using simpler GitHub action by @StevenMassaro in #3835
- Safely set code point limit for SnakeYaml (DAT-13189) by @StevenMassaro in #3807
- Fix failing
EnvironmentValueProviderTest
by @nvoxland in #3783 - Show
changesetsRolledback
only after rollback is complete (DAT-13440) by @StevenMassaro in #3846
Security, Driver and other updates
Note:
OWASP Dependency Check: Reported Vulnerabilities
snakeyaml.jar
- This is a "critical" vulnerability reported against the snakeyaml library. Note: Liquibase code is not vulnerable to this attack, but users can manually upgrade to the newest version of snakeyaml library, and will be upgraded to the unaffected snakeyaml 2.0 version in the next release. If you are interested, you can track the PR at #3865
- Bump
junit-jupiter-params
from 5.9.1 to 5.9.2 by @dependabot in #3673 - Bump
ant
from 1.10.11 to 1.10.13 by @dependabot in #3672 - Bump
firebird-testcontainers-java
from 1.2.0 to 1.3.0 by @dependabot in #3653 - Bump
actions/delete-package-versions
from 3 to 4 by @dependabot in #3649 - Bump
maven-plugin-plugin
from 3.7.0 to 3.7.1 by @dependabot in #3698 - Bump
assertj-core
from 3.23.1 to 3.24.2 by @dependabot in #3705 - Bump
jaybird
from 4.0.8.java8 to 5.0.0.java8 by @dependabot in #3659 - Bump
mariadb-java-client
from 3.1.0 to 3.1.2 by @dependabot in #3729 - Bump
snowflake-jdbc
from 3.13.26 to 3.13.27 by @dependabot in #3751 - Bump
picocli
from 4.7.0 to 4.7.1 by @dependabot in #3742 - Bump
actions/cache
from 3.2.3 to 3.2.4 by @dependabot in #3750 - Bump
actions/cache
from 3.2.4 to 3.2.5 by @dependabot in #3809 - Bump
maven-deploy-plugin
from 3.0.0 to 3.1.0 by @dependabot in #3802 - Bump
maven-shade-merge-manifest-transformer
from 0.0.2 to 0.0.3 by @dependabot in #3779 - Bump
postgresql
from 42.5.1 to 42.5.3 by @dependabot in #3778 - Bump
jaxb-runtime
from 4.0.1 to 4.0.2 by @dependabot in #3786 - Bump
jaxb-core
from 4.0.1 to 4.0.2 by @dependabot in #3787 - Bump
sqlite-jdbc
from 3.40.0.0 to 3.40.1.0 by @dependabot in #3772 - Bump
maven-enforcer-plugin
from 3.1.0 to 3.2.1 by @dependabot in #3759 - Bump
jaybird
from 5.0.0.java8 to 5.0.1.java8 by @dependabot in #3760 - Bump
mssql-jdbc
from 11.2.1.jre8 to 12.2.0.jre8 by @dependabot in #3761 - Bump
ojdbc8
from 21.8.0.0 to 21.9.0.0 by @dependabot in #3808 - Bump
postgresql
from 42.5.3 to 42.5.4 by @dependabot in #3831 - Migrate
setup-java
action to use Temurin by @gdams in #3607
New Contributors
- @zpanderson made their first contribution in #1834
- @droy-sandbox made their first contribution in #3550
- @mhewedy made their first contribution in #3081
- @GeertZondervan made their first contribution in #3597
- @yogurt-lei made their first contribution in #3572
- @gdams made their first contribution in #3607
- @SIEDA-EliasHeydrich made their first contribution in #3662
- @Thunderforge made their first contribution in #3677
- @KarolyNevelos made their first contribution in #3709
- @MarkTJohnson made their first contribution in #3756
- @jurgenkleverwal made their first contribution in #3799
- @mwiede made their first contribution in #3717

Liquibase v4.19.0 is a patch release with an XSD upgrade.
Full changelog: v4.18.0...v4.19.0
Enhancements
- Simplify assert calls and replaced with simpler and equivalent calls. by @arturobernalg in #3497
- Delete unused import statement. by @arturobernalg in #3522
- Added call to
modifyChangeSet
during execute method to allow the changeSet to be correctly set on the executor DAT-12388 by @wwillard7800 in #3511 - Remove unnecessary local variables that add nothing to the comprehensibility of a method. by @arturobernalg in #3373
- Allow loading gzipped data files by @mike-seger in #3379
- Use try-with-resources Statement when is possible. by @arturobernalg in #3374
- Define and reuse constants. Use an empty array styles to convert a collection to an array. by @arturobernalg in #3500
- Add support for block comment rollback commands on SQL changesets by @krishnaenugandula in #1399
- Allow primary key on
addColumn
for H2 by @nick318 in #3372 - Additional (optional)
tableType
attribute on theCreateTableChange
by @MartinRied in #3108 - Include "path" in
databasechangelog
's description column for all change types with "path" attributes by @MichaelKern-IVV in #3244 - #1466: Add
ignore:true
changeset attribute to Formatted SQL changeLogs by @skrivenko in #3377 - #1290: Forbid empty changeSet id and author by @skrivenko in #3397
- Allow to drop and create a view for a Postgres database if replacing the view would fail by @rozenshteyn in #3399
- Rename
DatabaseObjectComparator
class to beDatabaseObjectCollectionComparator
for clarity DAT-10112 by @wwillard7800 in #3544 - Do not lower case the
ProvidedValue
description if the string is capitalized, i.e. it starts with 2 upper-case characters DAT-12614 by @wwillard7800 in #3589 - Use '
Integer.compare
' instead by @arturobernalg in #3528 - Simplify '
Map
' operations. by @arturobernalg in #3527 - Remove unnecessary semicolon. by @arturobernalg in #3571
- Missing Override annotations. by @arturobernalg in #3558
- Prevents redundant loop iterations. Early loop exit in 'if' condition. by @arturobernalg in #3547
- DAT 6635 - Implement
TagCommand
by @filipelautert in #3570 - DAT-12576 update release workflow to attach artifact by
run_id
by @ap-liquibase in #3629 - DAT-12365 update
install4j
script to version 10.x by @jnewton03 in #3641 - Upgrades installer JDK version for next release. by @filipelautert in #3440
- remove licenses that were moved to individual extensions (DAT-12784) by @StevenMassaro in #3646
- DAT-12597 include commercial sources and javadoc in reversion by @ap-liquibase in #3671
Security, Driver and other updates
- Upgrade
mockito-inline
from 4.8.0 to 4.8.1 by @dependabot in #3382 - Upgrade
actions/cache
from 3.0.8 to 3.0.11 by @dependabot in #3370 - Bump
robinraju/release-downloader
from 1.5 to 1.6 by @dependabot in #3423 - Upgrade
postgresql driver
from 42.5.0 to 42.5.1 by @dependabot in #3501 - Bump
maven-plugin-plugin
from 3.6.4 to 3.7.0 by @dependabot in #3450 - Bump
sqlite-jdbc
from 3.39.3.0 to 3.39.4.0 by @dependabot in #3451 - Bump
maven-shade-plugin
from 3.4.0 to 3.4.1 by @dependabot in #3422 - Bump
gmavenplus-plugin
from 1.13.1 to 2.1.0 by @dependabot in #3391 - Bump
picocli
from 4.6.3 to 4.7.0 by @dependabot in #3432 - Bump
jcc
from 11.5.7.0 to 11.5.8.0 by @dependabot in #3414 - Upgrade
testcontainers-bom
from 1.17.3 to 1.17.5 by @dependabot in #3341
Fixes
- Fixes
generate-changelog
view comments for Postgres (DAT-9410) by @abrackx in #3403 - Adds
DefaultChangeExecListener
, catches and handles migration errors (DAT-9372) by @abrackx in #3431 - Fixes nullpointer when dealing with
LiquibaseException
on updates. by @filipelautert in #3447 - Resets changelog cache upon acquiring lock by @filipelautert in #3396
- Allows
createSequence
field "dataType
" to be use with DB2 as the database supports it. by @filipelautert in #3328 - Defines "
-- rollback empty
" as the way to specify "no rollback needed". by @filipelautert in #3324 - Fix create index on Postgresql and MSSQL using wrong column names when generating a changelog by @filipelautert in #3366
- Fixed input string handling in
CompareControl
constructor by @filipelautert in #3309 - Add '
ifExists
' parameter to thedropView
statement by @gzsombor in #3301 - Fix
getResourceAccessor
logic to avoid settingchangeLogDirectory
whensearchPath
has already set by @MalloD12 in #3347 - Ensures that Postgresql works with blob types
bytea
andoid
(large objects) by @filipelautert in #3381 - Improve
int
/tinyint
/smallint
/bigint
handling in H2 by @MalloD12 in #3274 - The
onSqlOutput
attribute does not work for preconditions in formatted SQL changelog. by @dyadyushko in #3436 - [DAT-11899] Modifies deploy plugin and distribution management. by @jnewton03 in #3457
- Adds
ChangeExecListener
properties to Maven plugin (DAT-12219) by @abrackx in #3443 - make
BufferedLogService
thread safe by @StevenMassaro in #3470 - Improved Sybase ASE Support by @carlos940513 in #665
- Do not write output files for computed columns when executing
dbDoc
. Fixes #1088 by @rozenshteyn in #3398 - Sequence owned by a table field must be included in database snapshot by @filipelautert in #3335
- Fixes snapshot of case-sensitive views by @filipelautert in #3329
- Fix
include
/includeAll
to correct trackrelativeToChangelog=true
paths using./
or../
by @nvoxland in #3355 - Improved readability in the
createCDILiquibaseConfig
method. by @musttafayildirim in #3316 - testing
main
andsha
builds by @jnewton03 in #3481 - Fix Postgresql
autoIncrement
Information in snapshot by @filipelautert in #3361 - Treat "
,
" as "or
" when parsing context expressions. Fixes #1103 by @rozenshteyn in #3426 - CORE-1127: Filter by context when doing a rollback. by @berryh in #898
- Implement
tagExists
Maven command (Fix issue 1063) by @rozenshteyn in #3385 - Fixes transaction handling within changesets on DB2 on z/OS by @MichaelKern-IVV in #3342
- Improve
dropAllForeignKeyConstraints
performance by @Spindl in #2155 - Adds error handling for
updateCount
(DAT-11950) by @abrackx in #3463 - Adds error handling to
update-to-tag
(DAT-11951) by @abrackx in #3468 - Adds error handling for
update-testing-rollback
command andupdateTestingRollback
goal (DAT-11952) by @abrackx in #3474 - Fixes behaviour of
includeAll
by keeping the trailing slash on the path by @filipelautert in #3506 - Restore
FileSystemResourceAccessor
and add tests. by @filipelautert in #3499 - Simplify
if
statements to a single assignment. Avoid extra works. by @arturobernalg in #3375 - Fixed
resolveSibling
method by updating URL resource type by @MalloD12 in #3413 - Fix dependency query for PostgreSQL 15 by @Domm98CZ in #3456
- Release
liquibase-nochangeloglock
extension with the others by @nvoxland in #3452
New Contributors
- @gzsombor made their first contribution in #3301
- @carlos940513 made their first contribution in #665
- @rozenshteyn made their first contribution in #3398
- @musttafayildirim made their first contribution in #3316
- @berryh made their first contribution in #898
- @Spindl made their first contribution in #2155
- @arturobernalg made their first contribution in #3375
- @Domm98CZ made their first contribution in #3456

Liquibase v4.19.0 is a patch release with an XSD upgrade.
Full changelog:v4.18.0...v4.19.0
Enhancements
- Simplify assert calls and replaced with simpler and equivalent calls. by @arturobernalg in #3497
- Delete unused import statement. by @arturobernalg in #3522
- Added call to
modifyChangeSet
during execute method to allow the changeSet to be correctly set on the executor DAT-12388 by @wwillard7800 in #3511 - Remove unnecessary local variables that add nothing to the comprehensibility of a method. by @arturobernalg in #3373
- Allow loading gzipped data files by @mike-seger in #3379
- Use try-with-resources Statement when is possible. by @arturobernalg in #3374
- Define and reuse constants. Use an empty array styles to convert a collection to an array. by @arturobernalg in #3500
- Add support for block comment rollback commands on SQL changesets by @krishnaenugandula in #1399
- Allow primary key on
addColumn
for H2 by @nick318 in #3372 - Additional (optional)
tableType
attribute on theCreateTableChange
by @MartinRied in #3108 - Include "path" in
databasechangelog
's description column for all change types with "path" attributes by @MichaelKern-IVV in #3244 - #1466: Add
ignore:true
changeset attribute to Formatted SQL changeLogs by @skrivenko in #3377 - #1290: Forbid empty changeSet id and author by @skrivenko in #3397
- Allow to drop and create a view for a Postgres database if replacing the view would fail by @rozenshteyn in #3399
- Rename
DatabaseObjectComparator
class to beDatabaseObjectCollectionComparator
for clarity DAT-10112 by @wwillard7800 in #3544 - Do not lower case the
ProvidedValue
description if the string is capitalized, i.e. it starts with 2 upper-case characters DAT-12614 by @wwillard7800 in #3589 - Use '
Integer.compare
' instead by @arturobernalg in #3528 - Simplify '
Map
' operations. by @arturobernalg in #3527 - Remove unnecessary semicolon. by @arturobernalg in #3571
- Missing Override annotations. by @arturobernalg in #3558
- Prevents redundant loop iterations. Early loop exit in 'if' condition. by @arturobernalg in #3547
- DAT 6635 - Implement
TagCommand
by @filipelautert in #3570 - DAT-12576 update release workflow to attach artifact by
run_id
by @ap-liquibase in #3629 - DAT-12365 update
install4j
script to version 10.x by @jnewton03 in #3641 - Upgrades installer JDK version for next release. by @filipelautert in #3440
- remove licenses that were moved to individual extensions (DAT-12784) by @StevenMassaro in #3646
- DAT-12597 include commercial sources and javadoc in reversion by @ap-liquibase in #3671
Security, Driver and other updates
- Upgrade
mockito-inline
from 4.8.0 to 4.8.1 by @dependabot in #3382 - Upgrade
actions/cache
from 3.0.8 to 3.0.11 by @dependabot in #3370 - Bump
robinraju/release-downloader
from 1.5 to 1.6 by @dependabot in #3423 - Upgrade
postgresql driver
from 42.5.0 to 42.5.1 by @dependabot in #3501 - Bump
maven-plugin-plugin
from 3.6.4 to 3.7.0 by @dependabot in #3450 - Bump
sqlite-jdbc
from 3.39.3.0 to 3.39.4.0 by @dependabot in #3451 - Bump
maven-shade-plugin
from 3.4.0 to 3.4.1 by @dependabot in #3422 - Bump
gmavenplus-plugin
from 1.13.1 to 2.1.0 by @dependabot in #3391 - Bump
picocli
from 4.6.3 to 4.7.0 by @dependabot in #3432 - Bump
jcc
from 11.5.7.0 to 11.5.8.0 by @dependabot in #3414 - Upgrade
testcontainers-bom
from 1.17.3 to 1.17.5 by @dependabot in #3341
Fixes
- Fixes
generate-changelog
view comments for Postgres (DAT-9410) by @abrackx in #3403 - Adds
DefaultChangeExecListener
, catches and handles migration errors (DAT-9372) by @abrackx in #3431 - Fixes nullpointer when dealing with
LiquibaseException
on updates. by @filipelautert in #3447 - Resets changelog cache upon acquiring lock by @filipelautert in #3396
- Allows
createSequence
field "dataType
" to be use with DB2 as the database supports it. by @filipelautert in #3328 - Defines "
-- rollback empty
" as the way to specify "no rollback needed". by @filipelautert in #3324 - Fix create index on Postgresql and MSSQL using wrong column names when generating a changelog by @filipelautert in #3366
- Fixed input string handling in
CompareControl
constructor by @filipelautert in #3309 - Add '
ifExists
' parameter to thedropView
statement by @gzsombor in #3301 - Fix
getResourceAccessor
logic to avoid settingchangeLogDirectory
whensearchPath
has already set by @MalloD12 in #3347 - Ensures that Postgresql works with blob types
bytea
andoid
(large objects) by @filipelautert in #3381 - Improve
int
/tinyint
/smallint
/bigint
handling in H2 by @MalloD12 in #3274 - The
onSqlOutput
attribute does not work for preconditions in formatted SQL changelog. by @dyadyushko in #3436 - [DAT-11899] Modifies deploy plugin and distribution management. by @jnewton03 in #3457
- Adds
ChangeExecListener
properties to Maven plugin (DAT-12219) by @abrackx in #3443 - make
BufferedLogService
thread safe by @StevenMassaro in #3470 - Improved Sybase ASE Support by @carlos940513 in #665
- Do not write output files for computed columns when executing
dbDoc
. Fixes #1088 by @rozenshteyn in #3398 - Sequence owned by a table field must be included in database snapshot by @filipelautert in #3335
- Fixes snapshot of case-sensitive views by @filipelautert in #3329
- Fix
include
/includeAll
to correct trackrelativeToChangelog=true
paths using./
or../
by @nvoxland in #3355 - Improved readability in the
createCDILiquibaseConfig
method. by @musttafayildirim in #3316 - testing
main
andsha
builds by @jnewton03 in #3481 - Fix Postgresql
autoIncrement
Information in snapshot by @filipelautert in #3361 - Treat "
,
" as "or
" when parsing context expressions. Fixes #1103 by @rozenshteyn in #3426 - CORE-1127: Filter by context when doing a rollback. by @berryh in #898
- Implement
tagExists
Maven command (Fix issue 1063) by @rozenshteyn in #3385 - Fixes transaction handling within changesets on DB2 on z/OS by @MichaelKern-IVV in #3342
- Improve
dropAllForeignKeyConstraints
performance by @Spindl in #2155 - Adds error handling for
updateCount
(DAT-11950) by @abrackx in #3463 - Adds error handling to
update-to-tag
(DAT-11951) by @abrackx in #3468 - Adds error handling for
update-testing-rollback
command andupdateTestingRollback
goal (DAT-11952) by @abrackx in #3474 - Fixes behaviour of
includeAll
by keeping the trailing slash on the path by @filipelautert in #3506 - Restore
FileSystemResourceAccessor
and add tests. by @filipelautert in #3499 - Simplify
if
statements to a single assignment. Avoid extra works. by @arturobernalg in #3375 - Fixed
resolveSibling
method by updating URL resource type by @MalloD12 in #3413 - Fix dependency query for PostgreSQL 15 by @Domm98CZ in #3456
- Release
liquibase-nochangeloglock
extension with the others by @nvoxland in #3452
New Contributors
- @gzsombor made their first contribution in #3301
- @carlos940513 made their first contribution in #665
- @rozenshteyn made their first contribution in #3398
- @musttafayildirim made their first contribution in #3316
- @berryh made their first contribution in #898
- @Spindl made their first contribution in #2155
- @arturobernalg made their first contribution in #3375
- @Domm98CZ made their first contribution in #3456

Full changelog:v4.17.2...v4.18.0
Breaking Changes
- Use
PathHandler
for writing log files, which allows using S3 and other extensions (DAT-11515) by @abrackx in #3438
Notable Changes
[PRO] Hashicorp Vault extension and Liquibase Pro
Use together for increased security and convenience of centralized properties
- Security: Vaults offer much greater security than defaults files or environment variables
- Centralization: Secure your database credentials, Liquibase Pro license key, secure URLs, and more in one central location. Update your critical properties in one place, and all linked tools and jobs use the new values
[PRO] rollback-on-error
command argument for update
command
- When set to
true
will attempt to roll back a failed update operation. - Note: changesets marked
failOnError=false
, do not count as error, and so do not runrollback-on-error
[OSS] Liquibase Environment variables
- Now free to all users, not just Liquibase Pro users.
- Learn more at Liquibase Environment Variables
Enhancements
- [PRO] Added new
modifyChangeSets
tag to support specification ofrunWith
attribute for all change sets ininclude
orincludeAll
Security, Driver and other updates
- Upgrade
mockito-inline
from 4.8.0 to 4.8.1 by @dependabot in #3382 - Upgrade
actions/cache
from 3.0.8 to 3.0.11 by @dependabot in #3370 - Bump
robinraju/release-downloader
from 1.5 to 1.6 by @dependabot in #3423 - Upgrade
postgresql driver
from 42.5.0 to 42.5.1 by @dependabot in #3501 - Bump
maven-plugin-plugin
from 3.6.4 to 3.7.0 by @dependabot in #3450 - Bump
sqlite-jdbc
from 3.39.3.0 to 3.39.4.0 by @dependabot in #3451 - Bump
maven-shade-plugin
from 3.4.0 to 3.4.1 by @dependabot in #3422 - Bump
gmavenplus-plugin
from 1.13.1 to 2.1.0 by @dependabot in #3391 - Bump
picocli
from 4.6.3 to 4.7.0 by @dependabot in #3432 - Bump
jcc
from 11.5.7.0 to 11.5.8.0 by @dependabot in #3414 - Upgrade
testcontainers-bom
from 1.17.3 to 1.17.5 by @dependabot in #3341
Fixes
- Fixes
generate-changelog
view comments for Postgres (DAT-9410) by @abrackx in #3403 - Adds
DefaultChangeExecListener
, catches and handles migration errors (DAT-9372) by @abrackx in #3431 - Fixes nullpointer when dealing with
LiquibaseException
on updates. by @filipelautert in #3447 - Resets changelog cache upon acquiring lock by @filipelautert in #3396
- Allows
createSequence
field "dataType
" to be use with DB2 as the database supports it. by @filipelautert in #3328 - Defines "
-- rollback empty
" as the way to specify "no rollback needed". by @filipelautert in #3324 - Fix create index on Postgresql and MSSQL using wrong column names when generating a changelog by @filipelautert in #3366
- Fixed input string handling in
CompareControl
constructor by @filipelautert in #3309 - Add '
ifExists
' parameter to thedropView
statement by @gzsombor in #3301 - Fix
getResourceAccessor
logic to avoid settingchangeLogDirectory
whensearchPath
has already set by @MalloD12 in #3347 - Ensures that Postgresql works with blob types
bytea
andoid
(large objects) by @filipelautert in #3381 - Improve
int
/tinyint
/smallint
/bigint
handling in H2 by @MalloD12 in #3274 - The
onSqlOutput
attribute does not work for preconditions in formatted SQL changelog. by @dyadyushko in #3436 - [DAT-11899] Modifies deploy plugin and distribution management. by @jnewton03 in #3457
- Adds
ChangeExecListener
properties to Maven plugin (DAT-12219) by @abrackx in #3443 - make
BufferedLogService
thread safe by @StevenMassaro in #3470 - Improved Sybase ASE Support by @carlos940513 in #665
- Do not write output files for computed columns when executing
dbDoc
. Fixes #1088 by @rozenshteyn in #3398 - Sequence owned by a table field must be included in database snapshot by @filipelautert in #3335
- Fixes snapshot of case-sensitive views by @filipelautert in #3329
- Fix
include
/includeAll
to correct trackrelativeToChangelog=true
paths using./
or../
by @nvoxland in #3355 - Improved readability in the
createCDILiquibaseConfig
method. by @musttafayildirim in #3316 - testing
main
andsha
builds by @jnewton03 in #3481 - Fix Postgresql
autoIncrement
Information in snapshot by @filipelautert in #3361 - Treat "
,
" as "or
" when parsing context expressions. Fixes #1103 by @rozenshteyn in #3426 - CORE-1127: Filter by context when doing a rollback. by @berryh in #898
- Implement
tagExists
Maven command (Fix issue 1063) by @rozenshteyn in #3385 - Fixes transaction handling within changesets on DB2 on z/OS by @MichaelKern-IVV in #3342
- Improve
dropAllForeignKeyConstraints
performance by @Spindl in #2155 - Adds error handling for
updateCount
(DAT-11950) by @abrackx in #3463 - Adds error handling to
update-to-tag
(DAT-11951) by @abrackx in #3468 - Adds error handling for
update-testing-rollback
command andupdateTestingRollback
goal (DAT-11952) by @abrackx in #3474 - Fixes behaviour of
includeAll
by keeping the trailing slash on the path by @filipelautert in #3506 - Restore
FileSystemResourceAccessor
and add tests. by @filipelautert in #3499 - Simplify
if
statements to a single assignment. Avoid extra works. by @arturobernalg in #3375 - Fixed
resolveSibling
method by updating URL resource type by @MalloD12 in #3413 - Fix dependency query for PostgreSQL 15 by @Domm98CZ in #3456
- Release
liquibase-nochangeloglock
extension with the others by @nvoxland in #3452
New Contributors
- @gzsombor made their first contribution in #3301
- @carlos940513 made their first contribution in #665
- @rozenshteyn made their first contribution in #3398
- @musttafayildirim made their first contribution in #3316
- @berryh made their first contribution in #898
- @Spindl made their first contribution in #2155
- @arturobernalg made their first contribution in #3375
- @Domm98CZ made their first contribution in #3456

Full changelog: v4.17.1...v4.18.2
This is a patch release that upgrades the HSQL driver to remove a security vulnerability.
Note: The newest HSQL driver requires Java 11, so if you use HSQL and JAVA 8, you will need to upgrade your Java.
Security Updates
No security updates are necessary
JDBC Driver and Third-Party Library Updates
- Upgrade hsqldb from 2.5.2 to 2.7.1 by @dependabot here
- [opencsv-upgrade] Updates opencsv to 5.7.1 by @abrackx here
OWASP Dependency Check: Reported Vulnerabilities
hsqldb.jar
- This is a vulnerability reported against the HSQLDB driver. We are currently on the newest version of HSQLDB and there is no fix for the issue as of yet.snakeyaml.jar
- This is a vulnerability reported against the snakeyaml. We are currently on snakeyaml 1.33 and this issue has been fixed in 1.32.

Full changelog: v4.17.0...v4.17.1
Fixes
- fix: Use default localhost finder for MacOs - fix #2098 by @grzi in #2134
- Allow
renameColumn
on newer SQLite versions by @MalloD12 in #3264 - Implement logic to validate dbms set at changeset and stored procedure levels by @MalloD12 in #3291
- Fixed
URIResource.resolveSibling
by @nvoxland in #3354 - Use
liquibase StringUtil
notlang3.StringUtils
by @nvoxland in #3338 - Handle absolute path in
getAll
method by @wwillard7800 in #3369
Updates
Security Updates
None
JDBC Driver and Third-Party Library Updates
- Upgraded
ojdbc8
from 21.6.0.0.1 to 21.7.0.0 by @dependabot in #3223 - Upgraded
maven-shade-plugin
from 3.3.0 to 3.4.0 by @dependabot in #3276 - Upgraded
slf4j-jdk14
from 2.0.2 to 2.0.3 by @dependabot in #3321 - Upgraded
snakeyaml
maven reference from 1.32 to 1.33 by @nvoxland in #3359 - Upgraded commons text transitive dependency by @abrackx in #338
OWASP Dependency Check: Reported Vulnerabilities
hsqldb.jar
– This is a vulnerability reported against the HSQLDB driver. We are currently on the newest version of HSQLDB and there is no fix for the issue as of yet.snakeyaml.jar
– This is a vulnerability reported against the snakeyaml. We are currently on snakeyaml 1.33 and this issue has been fixed in 1.32.
New Contributors
- @grzi made their first contribution in #2134

Full changelog: v4.16.1...v4.17.0
Notable Changes
- [PRO] The
liquibase flow
command and flow files are available with a Liquibase Pro license. It allows you to create portable, platform-independent Liquibase workflows that can run across different tools without modifying each workflow.- Learn more about
flow
here: flow - If you want to provide feedback on this capability, please email mario@liquibase.com.
- Learn more about
- [PRO] Pro license users can now integrate Amazon S3 with Liquibase. You can extend Liquibase to use remote file locations to enable secure, centralized file management. Learn more here: S3
- [PRO] Pro license users can use
searchpath
to find files located on S3 that cannot be found by an absolute path.- Learn more about How Liquibase Finds Files: Liquibase Search Path.
- Learn more about Use search-path with S3 here.
API Breaking Changes
- The
liquibase.resource.ResourceAccessor
APIs were updated to take advantage of the newliquibase.resource.Resource
abstraction that was introduced. Code that USES the existingResourceAccessor
methods will continue to work as before with no changes, but if you have written custom implementations ofResourceAccessor
there are new and changed methods to implement. For more information, see javadocs.liquibase.com
Enhancements
- Created new
liquibase.resource.Resource
interface by @nvoxland in #3064 - Created
ThreadLocalScopeManager
by @nvoxland in #3240 - Create
liquibase_autocomplete.zsh
by @szandany in #3130
Fixes
AlterSequence
: includeNOORDER
clauseordered="false"
is specified by @LeBezout in #1044- Upper case result columns only for case-insensitive databases by @fbiville in #3102
- Postgresql: Fix for case when current
search_path
is an empty string by @gadget in #3233 - Fix missing catalog on add column rollback by @jandurovec in #921
- Fix an error which can occur if
getAutoCommit
is called on a closed connection by @gpsfl in #3135 - Apply
sqlVisitors
toCompoundStatements
on DB2z by @MichaelKern-IVV in #3220 - Improved message when precondition
onFail: MARK_RAN
is set by @MultiM25 in #2238 - Add default catalog condition to
SequenceSnapshotGenerator
for Oracle by @gabrielnardes in #3152 - Fixed issue with H2
loadUpdateData
not correctly handling values with the string " values " in the inserted data by @tomyy in #1831 - Fix the smallserial issue not being parsed as a SmallInt type for Postgres by @MalloD12 in #3234
- Remove Snowflake unsupported logging from snapshot command (DAT-11291) by @abrackx in #3277
- Fix "double" handling with H2 by @MalloD12 in #3273
- Firebird: fix
createIndex
missing space around "computed" by @Markus-Patt in #1500 - Test Race Condititons During Liquibase Locking by @schrieveslaach in #2327
- Use configuration to get '
altTablespace
', 'altSchema
' and 'altCatalog
… by @mehrabisajad in #3124 - Add missing generator for parameterized SQL statements by @fbiville in #3225
- Add catalog null check to fix initializing a MSSQL db issue by @MalloD12 in #3235
- PD-2838: pointing DB list to docs by @adrian-velonis1 in #3280
- Addition of
liquibase.update()
Enhancement Request #1614 by @Betlista in #1638 - Fixed
createView
handling ofreplaceIfExists=true
when the string "replace" exists in the view definition by @filipelautert in #3305 - DAT-11407: replace backslashes in
NotFoundResource
URI by @StevenMassaro in #3322 - Fix
generateChangeLog
anddiffChangeLog
logic to avoid including default schema name when it should not by @MalloD12 in #3246
Updates
Security Updates
None
JDBC Driver and Third-Party Library Updates
- Upgraded
snowflake-jdbc
from 3.13.21 to 3.13.22 by @dependabot in #3196 - Upgraded
opencsv
from 5.6 to 5.7.0 by @dependabot in #3243 - Upgraded installer to use JDK 17.0.4.1 by @nvoxland in #3266
- Upgraded
sqlite-jdbc
from 3.39.2.1 to 3.39.3.0 by @dependabot in #3267 - Upgraded
jaxb-core
from 4.0.0 to 4.0.1 by @dependabot in #3292 - Upgraded
mariadb-java-client
from 3.0.7 to 3.0.8 by @dependabot in #3293 - Upgraded
jaxb-runtime
from 4.0.0 to 4.0.1 by @dependabot in #3294 - Upgraded
snakeyaml
from 1.32 to 1.33 by @dependabot in #3310
OWASP Dependency Check: Reported Vulnerabilities
None
New Contributors
- @trentdm made their first contribution in #3227
- @gadget made their first contribution in #3233
- @jandurovec made their first contribution in #921
- @gpsfl made their first contribution in #3135
- @MichaelKern-IVV made their first contribution in #3220
- @MultiM25 made their first contribution in #2238
- @gabrielnardes made their first contribution in #3152
- @tomyy made their first contribution in #1831
- @neilnaveen made their first contribution in #2997
- @Markus-Patt made their first contribution in #1500
- @adrian-velonis1 made their first contribution in #3280
- @Betlista made their first contribution in #1638
- @filipelautert made their first contribution in #3305

Full changelog: v4.15.0...v4.16.0
Notable Changes
- [LABS] The
liquibase flow
command and flow files are still available under the Liquibase Labs license.- Documentation on
flow
is here: flow - If you want to provide feedback on this capability, please email mario@liquibase.com.
- Documentation on
- [PRO] The Quality Checks for Databases are now available to all Pro license users. These checks inspect your active database, or a Liquibase-generated snapshot for compliance with your rules. Learn more here: List of Quality Checks
- Introduces "contextFilter" and "labelFilter" replacement settings by @nvoxland in 2971
- Liquibase has always had a way to use "labels" and "contexts" and then filter on those attributes in order to control which changesets are considered for execution. The new "
contextFilter
" and "labelFilter
" attributes help simplify workflows and prevent confusion.
- Liquibase has always had a way to use "labels" and "contexts" and then filter on those attributes in order to control which changesets are considered for execution. The new "
Enhancements
- Added support for changeset references in rollback for Formatted SQL changelogs by @atzawada in #1386
- Add
schemas
andincludeSchema
parameters to Maven generateChangeLog by @MalloD12 in #3210 - [PRO] Two new Pro commands
update-one-changeset
andupdate-one-changeset-sql
serving as complements torollback-one-changeset
androllback-one-changeset-sql
Fixes
- Fix
addColumn
on mysql when including a "value" attribute by @nvoxland in #3070 - Add support for
AS <dataType>
clause for H2 since version 2.0 by @marcus-nl in #3047 - Fixed NUMBER not compatible with H2 by @nick318 in #3098
SpringResourceAccessor
: fix issue with incorrect match pattern for files fromclassPath
root by @danilmalkin in #3095- Made
liquibase.snapshot.ResultSetCache
an extensible class. by @breglerj in #2087 - Added support for
\u2116
symbol win1251 Cyrillic symbol of number by @Stuchalin in #1324 - Tidy
ExecutorService
code, remove superfluous map access (Issue 1841) by @jamey-clari in #1842 - Fixed order of enum values on MySQL 8 by @Tantalon in #3150
- Removed invalid warning in Maven by @nvoxland in #3189
- [PRO] DAT-10810 QC: checks show changes (
--show-cols
flag, drop some, etc) by @dyadyushko in #3187
Updates
Security Updates
Updates the snakeyaml
dependency shipped in the liquibase-maven-plugin
POM to address CVE-2022-25857
JDBC Driver and Third-Party Library Updates
- Upgraded
postgresql
from 42.4.0 to 42.4.1 by @dependabot in #3145 - Upgraded
mariadb-java-client
from 3.0.6 to 3.0.7 by @dependabot in #3149 - Upgraded
sqlite-jdbc
from 3.36.0.3 to 3.39.2.0 by @dependabot in #3148 - Upgraded
mssql-jdbc
from 10.2.1.jre8 to 11.2.0.jre8 by @dependabot in #3162 - Upgraded
postgresql
from 42.4.1 to 42.5.0 by @dependabot in #3199 - Upgraded
sqlite-jdbc
from 3.39.2.0 to 3.39.2.1 by @dependabot in #3198 - Upgraded
snakeyaml
from 1.30 to 1.31 by @dependabot in #3224 - Upgraded
snakeyaml
inliquibase-maven-plugin
from 1.27 to 1.31 by @dependabot in #3263
OWASP Dependency Check: Reported Vulnerabilities
snakeyaml.jar
– This is a "medium" vulnerability reported against the snakeyaml library. We are currently on the newest version of snakeyaml
and there is no fix for the issue as of yet.
New Contributors
- @marcus-nl made their first contribution in #3047
- @nick318 made their first contribution in #3098
- @danilmalkin made their first contribution in #3095
- @breglerj made their first contribution in #3087
- @Stuchalin made their first contribution in #1324
- @jamey-clari made their first contribution in #1842
- @Tantalon made their first contribution in #3150
- @atzawada made their first contribution in #1386
- @MalloD12 made their first contribution in #3210
- @dyadyushko made their first contribution in #3187

Full changelog: v4.14.0...v4.15.0
Notable Changes
New liquibase flow
command
liquibase flow
and new flow-file (DAT-10419) by in #2946- The
liqubase flow
command and the Flow File on which it operates allow the user to place multiple commands within a single file so they can all run sequentially with a single command into the CLI. This is currently a Liquibase Labs restricted capability, so please contact mario@liquibase.com to request a license key. Learn more at flow
Enhancements
- Support setting
searchPath
inCommandTests
(DAT-11055) by @StevenMassaro in #3129- For more information, see How Liquibase Finds Files: Liquibase Search Path
- Added
duplicateFileMode
setting for Maven plugin by @nvoxland in #3119
Fixes
- Fix Maven plugin pro commands for local developer install by @StevenMassaro in #3101
- Update Derby reserved words by @andrewhj in #1971
- Output "may lose settings" warning on mysql/mariadb for more impacted change types by @nvoxland in #3045
- Improved "include" fix performance: optimized
normalizePath
method by @lzxgyh in #3063 - Removed
DatabaseInfoAttributes
in XSD by @kazz62 in #2239 - Do not split SQL on delimiters within
BEGIN
/END
blocks by @nvoxland in #1589 - Set max fractional timestamp digits to 12 for all DB2 editions (fix #2880) by @ctgnz in #2892
- Fix query for snapshotting views on DB2/Z by @michaelmatthiaskern in #2712
- Fix for bug 2711: Error when calling a procedure with parameters on DB2Z by @michaelmatthiaskern in #2765
- Improve CLI error messages by @nvoxland in #3078
- Improved handling of
endDelimiter="/"
by @nvoxland in #3118 - Upgrade installer to ship with JDK 17.0.4+8 by @nvoxland in #3104
- Improve failure message of
RowCountPrecondition
to preserve expected row count by @martinspielmann in #3093 - Changed what sequence attributes are included in
diff
/generatechangelog
for Snowflake by @yodzhubeiskyi in #3121 - Fix
columnNames
snapshot attribute ofuniqueConstraints
for Snowflake by @yodzhubeiskyi in #3123
Updates
Security Updates
No security updates needed in this release.
JDBC Driver and Third-Party Library Updates
Upgraded snowflake-jdbc
from 3.13.20 to 3.13.21 by @dependabot in #3061
OWASP Dependency Check: Reported Vulnerabilities
None
New Contributors
- @andrewhj made their first contribution in #1971
- @lzxgyh made their first contribution in #3063
- @kazz62 made their first contribution in #2239
- @ctgnz made their first contribution in #2892
- @michaelmatthiaskern made their first contribution in #2712
- @martinspielmann made their first contribution in #3093

Full changelog: v4.13.0...v4.14.0
Notable Changes
Split liquibase-core
and liquibase-commercial
JAR files by @nvoxland in #3050
- This change affects new downloads of Liquibase Pro.
liquibase-core-<version>.jar
contains only the open-source license. If you use Liquibase Pro or other commercial add-ons, you must also installliquibase-commercial-<version>.jar
.
Added liquibase.changelogParseMode
setting by @nvoxland in #3057
Enhancements
- Warn if XSD version does not match build version in
validate
command (DAT-9874) by @StevenMassaro in #3016 - Allow use of Pro-only objects for filtering with
generateChangeLog
(DAT-9542) by @StevenMassaro in #3068 - Improve connection exception by including underlying driver exception trace by @hessjcg in #3033
- Add
Closeable
/AutoCloseable
interface toliquibase.database.Database
by @zorglube in #2990
Fixes
- Fixed Formatted SQL "property" parsing by @nvoxland in #3037
- Ensure Postgresql
search_path
entries are quoted correctly by @nvoxland in #3009 - Updated "Change Set" wording to "Changeset" by @kataggart in #3042
- Improved error when
JAVA_HOME
is set to invalid value (DAT-10545) by @StevenMassaro in #3074 - Fixed
autoIncrement
incrementBy
/startWith
support in MySQL, H2, HSQLDB, and MariaDB by @tozogabee in #3026 - Improve
renameColumn
generated SQL on mssql by @mide25 in #783
Updates
Security Updates
No security updates needed in this release.
JDBC Driver and Third-Party Library Updates
- Upgraded
mariadb-java-client
from 3.0.5 to 3.0.6 by @dependabot in #3021 - Upgraded
testcontainers-bom
from 1.17.2 to 1.17.3 by @dependabot in #3020 - Upgraded
postgresql
from 42.3.4 to 42.4.0 by @dependabot in #2935 - Bump
jaxb-runtime
from 2.3.6 to 4.0.0 by @dependabot in #2964
New Contributors

Full Changelog: v4.12.0...v4.13.0
Notable Changes
PRO DAT-10083 - Added PSQL native executor feature by @abrackx
- You can now use the
runWith
command to pull in PSQL changesets. For more information, see Use PSQL and runWith on PostgreSQL
Enhancements
- Added new
liquibase.duplicateFileMode
setting by @nvoxland in #3006 - Add additional info in CLI
--version
output by @nvoxland in #2942 - Added support for new "
searchPath
" global configuration by @nvoxland in #2917 - PRO DAT-10575: add
labels
andcontexts
parameter tochecks run
command by @StevenMassaro - PRO DAT-10803 added sproc support for Snowflake by @KushnirykOleh
Fixes
- Hide
CommandFailedException
stacktrace when thrown to set exit code (DAT-9608) by @StevenMassaro in #2938 - Update copyright year in TXT files; also update links in TXT files (DAT-10261) by @StevenMassaro in #2955
- add support for
default-catalog-name
in SQL Server (DAT-10484) by @StevenMassaro in #2940 - Make additional query for more column information for MariaDB DAT-8693 by @wwillard7800 in #2898
- Include should fail if a parser cannot be found for the specified file by @nvoxland in #2972
- Improved Postgresql prepared statement performance by @nvoxland in #2914
- Cleanup relative paths preventing SQL files being found by the class loader by @marcsowen in #2932
- Fix missing attributes in serialization by @tms-91 in #2585
- Improved parsing of single-quoted strings by @nvoxland in #2949
- DAT-10260: add
outputFile
argument in Maven plugin forchecks.run
target by @StevenMassaro in #2975 - Formatted SQL files with uppercase in the Liquibase attributes (DAT-10531) by @abrackx in #2985
- handle empty or null input to
stripComments
method (DAT-10296) by @StevenMassaro in #2970 - Fixed issue with parameter expression parsing by @nvoxland in #2984
- Fixed before/after/at column arguments in
addColumn
by @nvoxland in #2943 - Adds
liquibase.psql.conf
example (DAT-10303) by @abrackx in #2939 - [DAT-10093] added schema escaping to
getColumns
call to JDBC metadata classes by @KushnirykOleh in #2895 - Use "numeric" (without parameters) data type in PostgreSQL by @LonwoLonwo in #1906
- Force "json" resultset formats in Snowflake when running Java 17+ by @nvoxland in #3019
- PRO DAT-9608: Hide
CommandFailedException
stacktrace when thrown fromchecks run
by @StevenMassaro - PRO Reenables oracle integration tests by @abrackx
- PRO DAT-10283 Checks should also look at included contexts and labels by @wwillard7800
- PRO DAT-10667: Hide disabled checks from unsupported changeset type list by @StevenMassaro
- PRO DAT-10690 and DAT-10691: Hide validated changelogs and database objects when no license key is provided by @StevenMassaro
- PRO DAT-10296: Handle empty or completely commented out changesets in
CheckForSpecificPatternsInSQL
check by @StevenMassaro
Updates
Security Updates
No security updates needed in this release.
JDBC Driver and Third-Party Library Updates
- Upgraded
jaxb-core
from 2.3.0.1 to 4.0.0 by @dependabot in #2962 - Upgraded
snowflake-jdbc
from 3.13.19 to 3.13.20 by @dependabot in #3001 - Upgraded
mariadb-java-client
from 3.0.4 to 3.0.5 by @dependabot in #2881 - Upgraded
ojdbc8
from 21.5.0.0 to 21.6.0.0.1 by @dependabot in #2987 - Upgraded
h2
from 2.1.212 to 2.1.214 by @dependabot in #2944 - PRO Bump
proguard-maven-plugin
from 2.5.3 to 2.6.0 by @dependabot - PRO Bump
maven-scm-plugin
from 1.12.2 to 1.13.0 by @dependabot - PRO Bump
assertj-core
from 3.22.0 to 3.23.1 by @dependabot
New Contributors

Full Changelog: v4.11.0...v4.12.0
Breaking Changes
Support for Snowflake database has been moved from the external extension liquibase-snowflake into the main Liquibase artifact. If you are using the Snowflake extension, remove it from your lib
directory or however you are including it in your project. If you are using the Docker image, the snowflake
docker label will no longer be updated so you need to update your reference to either latest
or the version tag you prefer. For CLI users, the Snowflake driver also ships out of the box and so you should remove that from the lib
directory as well #2841
Enhancements
- Quality Checks for Databases (DAT-9298) by @StevenMassaro in #2715
- This capability extends checks from just the changelog to look at the database itself for conditions of compliance, security, and more. This is currently a Liquibase Labs restricted capability, so please contact mario@liquibase.com to request a license key.
- Added a new "
liquibase.showBanner
" setting. Setting this value to 'false
' will disable the Liquibase startup banner from being shown. By @nvoxland in #2871 - Added a new "
liquibase.missingPropertyMode
" setting to control what happens when a changelog contains a${...}
string that doesn't correspond to a set changelog property. The default continues to be "preserve," which leaves it as-is. But other possible values areERROR
orEMPTY
which will either stop execution with an error or replace it with an empty string. By @dwieland in #2656 - Added new "
liquibase.preserveSchemaCase
" argument to preserve the case of schemas exactly as passed to the various schema settings. Default remains "false
" as before. DAT-10027 By @wwillard7800 in #2888 - Introduced "
latest
" xsd file path. In addition tohttp://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.12.xsd
type XSDs references, you can now also usehttp://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd
instead. By using "latest
", Liquibase will use the bundled XSD for its version. The uploaded "latest
" XSD will always be the most recent Liquibase release, so note how they can be different and locally cached IDE versions may be different yet. By @nvoxland in #2886 - Added new
ConfiguredValueModifier
extension point. This allows extensions to be written which will translate or convert configuration values from what was passed by the user before the value is passed to the internal code. By @mcred in #2252 - Updated
StandardLockService
interface to make it more useful for extensions by @Cliftonz in #2785
JDBC Driver and Third-Party Library Updates
- Added
connector-api.jar
tointernal/lib
by @nvoxland in #2873 - Upgraded
mysql-connector-java
from 8.0.28 to 8.0.29 by @dependabot in #2798 - Move
opencsv
to be non-shaded by @nvoxland in #2903 - Added Snowflake driver to CLI by @nvoxland in #2931
- Upgraded
mssql-jdbc
from 10.2.0.jre8 to 10.2.1.jre8 by @dependabot in #2846
Fixes
- Fixed BLOBs in
loadData
for MySQL/MariaDB by @MichaelCkr in #2595 - Fixed getting ENUM column values from Mysql database having multiple schemas by @akatiyar in #2616
- Added logic to
Derby.getDefaultDriver()
to check for availability of different driver classes by @AlexanderSashchenko in #2571 - Fixed
TableOutput
spaces when using long words (DAT-10069) by @StevenMassaro in #2879 - Fixed
addAutoIncrement
startValue
andincrementBy
support on Postgresql by @nvoxland in #2588 - Support non-classpath: protocols in Spring by @reallyinsane in #2524
- Fixed #2780:
AddColumnChange
with schema andNOT NULL
constraint fails by @MartinRied in #2781 - Make extension matching for SQL parsers case-insensitve DAT-10265 by @wwillard7800 in #2884
- Restored
outputDefaultSchema
andoutputDefaultCatalog
command arguments by @nvoxland in #2834 - Quote
liquibase.jar
path in bash launcher by @nvoxland in #2885 - Fix for working with Firebird 2 and newer versions. Fixes nullables and boolean type. by @mngsgoncalves in #2277
- Fixed issue if change changelog object is null by @kamalnigam in #2837
- Filter out license key strings for Hub communication DAT-10522 by @wwillard7800 in #2926
- Specify which parameter is missing in the error message by @bendem in #2567
- Split license information into OSS vs. Pro directories by @nvoxland in #2868
- Use the method
setBlob
to insert blob data by @xjodoin in #605 - Smooth out differences in "
./
" paths by @nvoxland in #2915 - Include inherited labels in DATABASECHANGELOG table by @nvoxland in #2870
- Restored OSGi headers by @nvoxland in #2924
- Working on better Git Bash console solution DAT-10230 by @wwillard7800 in #2882
- Close
InputStream
inSQLFileChange
(DAT-9855) by @StevenMassaro in #2920 - Support prepared statements for query by @fbiville in #2913
- Implement
NOT VALID
for Postgres databases by @coenvk in #2600
New Contributors
- @MichaelCkr made their first contribution in #2595
- @akatiyar made their first contribution in #2616
- @Cliftonz made their first contribution in #2785
- @reallyinsane made their first contribution in #2524
- @MartinRied made their first contribution in #2781
- @dwieland made their first contribution in #2656
- @mngsgoncalves made their first contribution in #2277
- @kamalnigam made their first contribution in #2837
- @bendem made their first contribution in #2567
- @xjodoin made their first contribution in #605
- @abrackx made their first contribution in #2934
- @coenvk made their first contribution in #2600

Full Changelog: v4.10.0...v4.11.0
Breaking Changes
Starting with 4.11, we moved the global libraries we ship with the CLI from the lib directory to a new internal directory structure. The lib
directory is still included in the classpath as the place where users can add the additional global drivers/libraries they need.
The liquibase --version
output has been enhanced to also include the third party libraries being used and their versions.
Impacts:
- If you are upgrading Liquibase by overwriting an existing directory, you will have duplicate libraries between
lib
andinternal/lib
. You should manually delete any files inlib
which you did not add yourself. Liquibase will continue to work even with the duplicate libraries, but you may not be running the latest version of ones we ship, since thelib
files take priority over what is ininternal/lib
. New installs are not impacted by this. - If you have any automation that did anything with our shipped files in
lib
, update it to reflect the newinternal/lib
location.
For security reasons, we have also changed what is logged by the CLI to only log Liquibase channel messages by default, rather than all log channels. If you are relying on logging from non-Liquibase libraries, you can add channels with the new --log-channels
flag, including --log-channels=all
to restore the old functionality.
Enhancements
- Moved shipped JAR files out of
lib
and into a newinternal/lib
directory by @nvoxland in #2850 - To help with performance troubleshooting, there is now a
--monitor-performance
argument for the CLI (and only the CLI) which enables profiling of the Liquibase run. The generated profiling information can help us understand and fix performance issues easier. #2599 - Upgraded Java shipped with the installers from 11 to 17 by @nvoxland in #2602
- Added whitelist for CLI log channels by @nvoxland in #2859
Fixes
- Do not throw a confusing error if a datatype specified as a changelog parameter is not expanded by @nvoxland in #2772
- Fixed SQLite not correctly snapshotting tables with underscores in the name by @nvoxland in #2778
- Fixed local XSD lookup by @nvoxland in #2830
- Standardized "
start-h2
" commands on "liquibase init start-h2
" logic by @nvoxland in #2597 - Support default values in the format
(0)::real
by @nvoxland in #2836 - Fix handling of
defaultSchemaName
on Postgresql by @nvoxland in #2812 - Introduce
generateStatementsFromRows
for extensions by @fbiville in #2686 - Fixed XSD type of "ordered" and "cycle" attributes to be boolean by @DartVerder in #2725
- Remove custom log message filtering by @nvoxland in #2777
- Spring Boot: better support
relativeToChangelogFile
whenResourceLoaders
returnFilteredReactiveWebContextResources
by @erik-meuwese-topicus in #2758 - Fix
ForeignKeyComparator
when foreign key table is not known by @joserebelo in #2565. Fixes #2389 (foreignKeyConstraintExists
not working). See 4.7.0 "Breaking Changes"foreignKeyTableName
. - Test System Framework: add support for "
liquibase.sdk.testSystem.skip
" property by @StevenMassaro in #2838 - Test System Framework: stop database containers when spock execution ends by @StevenMassaro in #2843
Updates
Security Updates
No security updates needed in this release.
JDBC Driver and Third-Party Library Updates
- Upgraded
picocli
from 4.6.1 to 4.6.3 by @dependabot in #2518 - Upgraded
jaxb
libraries to the newest 2.3.x versions by @nvoxland in #2793 - Upgraded
snakeyaml
from 1.27 to 1.30 by @dependabot in #2498 - OWASP Dependency Check: Reported Vulnerabilities
jcc.jar
– This is a vulnerability reported against the IBM DB2 JDBC driver. It is awaiting reanalysis. We are currently on the newest version, CVE-2008-1997
New Contributors

Full Changelog: v4.9.1...v4.10.0
Breaking Change
Upgraded mssql driver to 10.2.0 by @nvoxland in #2790
End User Impact: The driver changed the encryption default from "false" to "true" between 8.x and 10.x. If you have a self-signed certificate in your database, you must do one of the following: add encrypt=false
; add trustServerCertificate=true
; or add the server certificate to the java trusted certificate list. For production systems, Liquibase recommends against using self-signed certificates without adding the server certificate to the Java keystore. For more information on installing the trusted certificate, see Certificate Management (SQL Server Configuration Manager).
Security Updates
Upgraded Postgresql from 42.3.2 to 42.3.4 to address CVE-2022-26520 by @dependabot in #2769
- Vulnerability introduced in
org.postgresql:postgresql@42.3.2
- Fixed in
org.postgresql:postgresql@42.3.3
JDBC Driver and Third-Party Library Updates
- Upgraded
oracle
driver to 21.5.0.0 by @nvoxland in #2791 - Upgraded
jcc
from 11.5.6.0 to 11.5.7.0 by @dependabot in #2421 - Upgraded
mssql
driver to 10.2.0 by @nvoxland in #2790 - Upgraded
h2
from 2.1.210 to 2.1.212 by @dependabot in #2740 - Upgraded
sqlite-jdbc
from 3.34.0 to 3.36.0.3 by @dependabot in #2412 - Upgraded
jaybird
from 4.0.3.java8 to 4.0.6.java8 by @dependabot in #2802 - Upgraded
hsqldb
from 2.4.0 to 2.5.2 by @nvoxland in #2797 - Updated information in "licenses" directory by @nvoxland in #2795
- Upgraded
mariadb
driver to 3.0.4 by @nvoxland in #2789
Enhancements
- Quality checks for Maven -
checks.run
andchecks.show
goals [DAT-9033] [DAT-9034]- For more information, see Maven checks.show and Maven checks.run.
- Allow
CompositeResourceAccessor
to have a non-fixed size list ofResourceAccessor
so that the list can be added to/removed from by @wwillard7800 in #2650 - Correctly handle null class package names in the logging system by @nvoxland in #2763
- Handle URLs correctly in error conditions DAT-9882 by @wwillard7800 in #2709
- Validate formatted SQL changelog for invalid patterns DAT-7721 by @wwillard7800 in #2761
Fixes
- [PRO] Diff commands correctly recognizing triggers as changed/different in Postgresql10 [DAT-9559]
- Fix EnterpriseDB database recognition by @nvoxland in #2767
- Fix start failure with
NullPointerException
when Environment contains empty string Key (fix Issue 2631) by @feltonma91 in #2636 - Fix
createTable
on Mysql not preserving primary key information when remarks also defined on the column by @nvoxland in #2752 - Updated information in "licenses" directory by @nvoxland in #2795
New Contributors

[PR#2666] [nvoxland] Liquibase 4.9.1 release is a patch release that fixes the MANIFEST.MF
location in the liquibase.jar
file for tools that require the MANIFEST.MF
file to be the first entry in the jar archive. If the MANIFEST.MF
file is not the first entry, java.util.jar.JarInputStream#getManifest()
reading the MANIFEST.MF
file will not return the manifest information appropriately. The PR fixes issue #2648.
[Issue#2672] Addresses the remaining OSGi-related packaging problems to fully restore Liquibase support in OSGi environments.
Fixes
- [PR#2651] Fixed the issue with a malicious software alert for the Liquibase macOS Installer preventing from proceeding with the installation. [DAT-9524]
- [PR#2643] Fixed the handling of non-integer datatypes using a default value with a sequence in snapshot on PostgreSQL [DAT-8670]
- [PR#2691] Fixed invalid JSON in the
example-changelog.json
file [DAT-9893]

Liquibase 4.9.0 is now available on the Download Liquibase page.
This release includes the checks.run
and checks.show
Maven goals, quality checks JSON object, community-contributed pull requests, Liquibase Open Source and Liquibase Pro bug fixes, and other notable changes.
Notable Changes
Liquibase 4.9.0 introduces the following functionality:
- Quality checks for Maven –
checks.run
andchecks.show
goals [DAT-9033] [DAT-9034] - [PR#2558] [kavya-shastri] [Breaking Change] The change in the usage of the Liquibase global configuration for the
secureParsing
parameter to prevent the entity resolver from scanning the network for missing XSDs. If you reference an XSD other than one of Liquibase and have never stored them in yourclasspath
, Liquibase will no longer automatically download and use the XSD from the internet for security reasons. The default value forsecureParsing
istrue
, but you can set it tofalse
in any of the Liquibase configuration locations.Note: For more information, see Example Changelogs: XML Format.
- [PR#2529] [Krzysztof Sierszeń] [LB-1781] The
uniqueConstraintExists
precondition to check for the existence of unique constraints before running the update. You can check the constraint by constraint name or columns:
Note: For more information, see Maven checks.run and Maven checks.show.
<preConditions>
<uniqueConstraintExists constraintName="uq_constraint_name" tableName="test_table"/>
</preConditions>
<preConditions>
<uniqueConstraintExists tableName="test_table" columnNames="first_name, last_name"/>
</preConditions>
<listener>
<listener-class>liquibase.integration.servlet.LiquibaseJakartaServletListener</listener-class>
</listener>
The PR fixes issue #2298.
- [PRO] Quality checks JSON object so that your application can easily parse through the Liquibase output [DAT-9094]
Note: For more information, see Quality Checks JSON Object.
Enhancements
- [PR#2434] [Balázs Dési] Added the Maven
validate
goal tomaven-liquibase-plugin
to provide access to the existing Liquibasevalidate
command and be available not only in CLI, but also in MavenNote: For more information, see Maven validate.
- Added the ability to use
sqlcmd
on an instance with multiple databases [DAT-9513]Note: For more information, see Use SQLCMD and runWith on Microsoft SQL Server.
- Added support for Liquibase, Spring Boot, and SQL Plus run with Kerberos [DAT-9409]
Note: For more information, see Using Liquibase and Spring Boot with SQL Plus and Kerberos Authentication.
- [PR#2561] [Wesley Willard] Added the
--schemas
argument to thesnapshot
command to be able to compare a multi-schema database to its snapshot [DAT-9433] - [PR#2606] [Wesley Willard] Added a best practice message for the
generate-changelog
command so that you can check if thesplitStatements
attribute works for your environment when generating formatted SQL changelogs [DAT-9327] - Added the
StripComments
attribute for theSQLUserDefinedPatternCheck
quality check to choose the code that theSQLUserDefinedPatternCheck
searches, including the option for the commented code. TheStripComments
attribute strips comments from SQL before searching for the string. The default value isN
(no). [DAT-9098] - [PR#2273] [Tsvi Zandany] Added the autocomplete option for quality checks commands running on macOS
Fixes
- [PR#2542] [nvoxland] Fixed the
--should-snapshot-data
CLI parameter to be preserved when the--data-output-directory
property is not specified in the command - [PR#2330] [Inane Mohammed] Fixed the issue with checking the
referenceSnapshot
parameter instead ofreferenceDatabase
for the potential null value - [PR#2521] [Steven Massaro] Added a label, context, and comment to the
example-changelog.sql
file that comes with the Liquibase installation package [DAT-9325] - [PR#2556] [nvoxland] Fixed the CockroachDB processes so that Liquibase checks the URL first rather than proceeding with SQL calls
- [PR#2569] [Clarence Dimitri CHARLES] Made
FormattedSqlChangeLogParser
to be reusable for extensions - [PR#2377] [devorgpl] Fixed the issue with updating statements when the
onlyUpdate
attribute isfalse
in theloadUpdateData
Change Type for HSQL - [PR#1908] [Emiliano Capoccia] Fixed the issue with retrieving the CockroachDB version. As part of the fix, Liquibase generates version-specific autoincrement SQL statements for CockroachDB identity columns:
SMALLSERIAL
,SERIAL
, andBIGSERIAL
for versions earlier than 21.2GENERATED BY DEFAULT AS IDENTITY
for version 21.2 or later
- [PR#2135] [PR#2133] [Saucistophe] [mkobylarz] Fixed the issue with the
endDelimiter
attribute not being respected during the Liquibase update. The fix forendDelimiter
does not break the handling of trailing comments in SQL statements. [LB-2186] - [PR#2573] [nvoxland] Fixed the quoting for the
MANIFEST.MF
file for correct versioning - [PR#2572] [Steven Massaro] Fixed the issue with generating changelogs for PostgreSQL columns that use
SET DEFAULT
[DAT-8779] - [PR#2589] [nvoxland] [Marcel Blonk] Fixed the MD5 checksums generated by older versions of Liquibase to be correctly updated in the DATABASECHANGELOG table when a more recent version of Liquibase executes against the database. The PR fixes issue #2580.
- [PR#2592] [nvoxland] Added support for the double precision type in MySQL. The PR fixes issue #2337.
- [PR#1894] [KushnirykOleh] Fixed the time data type to be precise for PostgreSQL. The PR fixes issue #1774.
- [PR#2387] [Jenson3210] Fixed the handling of date and time in the
loadData
Change Type - [PR#2566] [nvoxland] Updated OpenCSV from 5.5.2 to 5.6
Contributions
Our community has built a lot. Thanks to everyone who contributes and helps make the Liquibase community strong, including the following first-time contributors:

This release includes the init hub
subcommand, Liquibase Pro support for MSSQL Server sqlcmd
utility, community-contributed pull requests, and Liquibase Open Source and Liquibase Pro bug fixes.
Notable Changes
Liquibase 4.8.0 introduces the following functionality:
- The
init hub
subcommand that connects your local Liquibase activity to Liquibase Hub and sets up the Liquibase environment to use Liquibase Hub. [DAT-8769]
Note: For more information, see init hub and Get Started with Liquibase Hub.
- [PRO] The
sqlcmd
utility support to process complex SQL for MSSQL Server. Liquibase provides theliquibase.sqlcmd.conf
file to pass arguments to your executor when running Liquibase Pro. [DAT-7447]
Note: For more information, see Use SQLCMD and runWith on Microsoft SQL Server.
- Changes to the behavior of the XML parser, which no longer allows referencing external DTD files for security reasons. If you use externally defined entities or any other potentially insecure XML feature in your changelogs, set
liquibase.secureParsing=false
. [PR#2384] [LB-2218]
Note: For more information about the ways to set the parameter, see Liquibase Parameters.
- The upgrade of the
postgresql
(from42.2.12
to42.3.2
) andh2
(from2.0.206
to2.1.210
) drivers that Liquibase includes in the installation package. If you use those drivers and upgrade an existing Liquibase installation, remove the earlier versions of drivers from theLIQUIBASE_HOME/lib
directory.
Enhancements
- Implemented the
SimpleObjectConstructor
interface for DB2 on z/OS [DAT-8580] - Included the CLI instructions on how to use the properties file with a nonstandard name when running the
init project
subcommand [DAT-9041] - Improved the output message for
init start-h2
when the H2 database driver is specified, but there is no connection detected [DAT-8992] - Added validation errors for the
enableCheckConstraint
,disableCheckConstraint
,dropPackage
,dropPackageBody
Change Types [DAT-9017] - [PR#2367] [Mike Olivas] Added example rollback scripts to the
example-changelog.sql
file [LB-2220] - [PR#1648] [Daniel Gray] Improved the exception error message for the
customChange
node with noclass
attribute [LB-1144] - [PR#2222] [msimko81] Added the offline mode support for the
rollback-sql <tag>
operation [LB-2198] - [PR#2273] [Tsvi Zandany] Added the autocomplete quality checks commands for macOS
- [PR#2308] [Valentin Blistin] Added the
close
method for theClassLoaderResourceAccessor
class [LB-2205]
Fixes
- Fixed the
renameSequence
Change Type generating an uppercase SQL instead of lowercase and causing failures with case-sensitive databases [LB-1763] - Fixed the
generate-changelog
anddiff
commands to show and generate a proper SQL with autoincrement for PostgreSQL [DAT-8779] - [PR#1320] [PR#2329] [Anatoly S] [Nathan Voxland] [Matteo Turra] Improved the UTF-8 character support in the
<sql>
tags [LB-562] - [PR#2139] [wziebicki] Improved the
UniqueConstraintSnapshotGenerator
class to add a table name to the Oracle database query so that the cache key can contain it, and the unique constraint can be read from cache [LB-2206] - [PR#2335] [erzsebet] Removed duplicated DATABASECHANGELOGLOCK SQL statements when running the
update-sql
command against a new database [LB-2208] - [PR#2505] [Nathan Voxland] [Dries Samyn] [erzsebet] Fixed the OSGI support with the
MANIFEST.MF
file in theliquibase-core-4.7.0.jar
file. The PR fixes PR#2361. - [PR#2366] [Steven Massaro] Made the
sp_rename
function to be lowercase when using MSSQL Server - [PR#2429] [Nathan Voxland] [Mirko Dostmann] [Alex Litovsky] Fixed the Ant and Apache Derby support. The PR fixes PR#2388 and PR#2391. [LB-2222]
- [PR#2397] [Nathan Voxland] [maxencelaurent] Implemented the logging of exceptions in the CDI integration. The PR fixes PR#2354. [LB-2223]
- [PR#2398] [Nathan Voxland] [urvanov-ru] Fixed the handling of schema snapshots with an underscore. The PR fixes PR#1604. [LB-2219]
- [PR#2340] [Nathan Voxland] [nickshoe] Enabled adding the
computed=true
columns with no type set in thecreateTable
Change Type. The PR fixes PR#2283. [LB-2215] - [PR#2372] [Nathan Voxland] [Henrik Sachse] [rburgst] Fixed the autoincrement syntax for H2 2.0 and later versions. The PR fixes PR#2362. [LB-2216]
- [PR#2549] [Nathan Voxland] [jenhae] Added validation errors for Liquibase and MSSQL Server if the
ordered
clause is specified in thecreateSequence
oralterSequence
Change Type. The PR fixes PR#2528. - [PR#2351] [Wesley Willard] [Joseph Cen] Fixed the handling of properties defined with different
dbms
filters. The PR fixes PR#2231. [LB-2217] - [PR#2122] [Tobias Liefke] Fixed the handling of the classpath for resources. The PR fixes PR#2121.
Contributions
Our community has built a lot. Thanks to everyone who contributes and helps make the Liquibase community strong, including the following first-time contributors:

This patch release includes community-contributed pull requests, Liquibase Open Source bug fixes, and Liquibase Pro bug fixes.
Here is a closer look at what we improved in the latest release.
Known Issues
In version 4.7.0, users that have "edb" in connection URLs but are not using EnterpriseDB experienced errors that caused Liquibase to misinterpret the database dialect. This patch release resolves this issue along with several others.
Enhancements
- Added a new quality check –
RollbackRequired
. The check detects when a changeset does not have a rollback. [DAT-8871] - Enabled SQL parser for the
TableColumnLimit
check to work with formatted SQL changelogs [DAT-8531] - Implemented the
--auto-update
quality check parameter, which allows automatic backup and updating of theliquibase.check-settings.conf
file when new quality checks are available. [DAT-8752]- CLI:
--auto-update=[on|off]
- Liquibase properties file (
liquibase.properties
):liquibase.command.checks.show.autoUpdate: [on|off]
- [PRO] Environment variable:
LIQUIBASE_COMMAND_CHECKS_SHOW_AUTO_UPDATE=[ON|OFF]
- CLI:
Note: You can use the property not only with the show
command but any other quality checks command.
- [PR#1932] [Sergeev Viktor] Enabled changeset execution details to be shown in the output [LB-1886]
- [PR#2261] [Nathan Voxland] Marked the
liquibase-maven-plugin
logging configuration as deprecated [LB-2183] - [PR#2217] [Wesley Willard] [Marcono1234] Made lock granted time consistent with date executed time. Modified the
list-locks
output message. The PR fixes PR#2029. [LB-2126] - [PR#2293] [Nathan Voxland] [ThisOldDog] Added support for the additional information with "double" datatypes in MySQL. The PR fixes PR#2169. [LB-2195]
- [PR#2359] [AlexanderSashchenko] Added validation errors for the SQLite and DB2 on z/OS databases [DAT-8906]
- [PR#2348] [Steven Massaro] Updated the URLs in the CLI output to direct to the documentation website [DAT-8947]
- [PR#2333] [Wesley Willard] Enabled property parsing in
FormattedSqlChangeParser
[DAT-4793] - [PR#2356] [Steven Massaro] Added the output message which points to the
init project
command if you miss a supported argument in any command [DAT-8641]
Fixes
- [PR#2364] [Nathan Voxland] [M-Koers] Made
EnterpriseDBDatabase
detection less broad. The implementation ofEnterpriseDBDatabase
picked up database with "edb" in the URL instead of an actual EDB URL. The PR fixes PR#2363. [LB-2214] - Fixed quality checks with
OBJECT_TYPES=TABLE, COLUMN, SEQUENCE
specified in the sameObjectNameMustMatch
rule to find all matches [DAT-8716] - Fixed the
runWith=changeLogProperty
attribute not working in a formatted SQL changelog [DAT-4793] - [PR#2270] [Nathan Voxland] [Michael Kroll] Fixed the handling of the
cacheSize
attribute in thecreateSequence
andalterSequence
Change Types for MariaDB. The PR fixes PR#2147. [LB-2191] - [PR#2269] [Nathan Voxland] [Tsvi Zandany] Fixed the handling of the
tag-exists
command old syntax in Liquibase 4.4 and later (liquibase tag-exists myTag
) to correctly convert the pattern into new versions. The PR fixes PR#2109. [LB-2192] - [PR#2188] [Cullen Coyle] Added the
columnDataType
attribute for the generatedsetColumnRemarks
changesets to fix an error in MySQL [LB-2199] - [#932] [Matthias Wuttke] Added support for sequences in MaxDB [LB-41]
- [PR#2282] [AlexanderSashchenko] Fixed the drop column statement generator for DB2 on z/OS [DAT-8744]
Contributions
Our community has built a lot. Thanks to everyone who contributes and helps make the Liquibase community strong, including the following first-time contributors:

Tip: Liquibase Hub introduces the Liquibase Hub DevOps Metrics functionality with four reports that provide the data to optimize your DevOps performance: Deployment Frequency, Change Migration Time, Change Failure Rate, Time to Fix Failing Changes.
This release includes community-contributed pull requests, Liquibase Open Source and Liquibase Pro bug fixes, and a new command to get started with Liquibase – the init
command.
Here is a closer look at what we improved in the latest release.
Breaking Changes
-
[PR#2228] [Nathan Voxland] Handle the fact that FK names are not always unique. Fixes PR#2227. When using the
foreignKeyConstraintExists
precondition, you must now specifyforeignKeyTableName
. See also: PR#2565 fixing #2389. in 4.11.0.
Notable Changes
Liquibase 4.7.0 introduces the init
command with the project
and start-h2
subcommands:
- The
init project
subcommand helps to set configuration files for using Liquibase or, if you already use Liquibase, create new project files with minimal input. [DAT-8640] - The
init start-h2
subcommand helps to start the included in-memory H2 database. The subcommand needs to be run in a new command line or terminal window. [DAT-8945]
Note: For more information and examples of using init
project, see init project.
Additionally, we have updated the Liquibase Getting Started tutorials and sample changelog files in the installation package. From now on, you can use sample SQL, XML, JSON, and YAML changelog files with the corresponding changesets. [LB-2177] [LB-2174]
Note: Check Liquibase Getting Started to see more details.
Enhancements
- [PRO] Improved the output of the
rollback-one-update
command [DAT-7590] - [PR#2244] [Tsvi Zandany] Enabled the use of the
jdbc:edb
URL for Liquibase to recognize EnterpriseDB - [PR#2225] [Nathan Voxland] [Konstantin] Enabled the use of lowercase
sys.synonyms
objects for thegenerate-changelog
anddiff-changelog
commands in Liquibase and SQL Server. The PR fixes PR#2044. - Added DB2 on z/OS database type and Java classes for Liquibase [DAT-8575]
- Upgraded H2 to the later version – 2.0.206
- [PR#2197] [Andrii Tytarchuk] Added optional SQL Plus properties to the
liquibase.sqlplus.conf
file and put the file in theexamples/sql
folder [DAT-7618]liquibase.sqlplus.args
liquibase.sqlplus.keep.temp.path
liquibase.sqlplus.keep.temp.name
- [PR#2215] [Nathan Voxland] Improved MySQL
loadData
performance
Fixes
- Fixed the
generate-changelog
wrong dependency order: theaddPrimaryKey
Change Type appeared before its base table in PostgreSQL [DAT-8256] - Fixed the quality checks settings file to be created using both relative and absolute paths [DAT-8275]
- Fixed quality checks reporting only the first failure for a changeset to report all failures in outputs [DAT-8630]
- [PR#2066] [smainz] Fixed the
loadData
Change Type to recognize CSV files when loading data with the path that contains a dot character ('.
') - [PR#2071] [Nicolas Humblot] [Philipp] Fixed the
addNotNullConstraint
Change Type causing the "Data too long" error message. The PR fixes PR#1054. - [PR#2073] [smainz] Fixed the
relativeToChangelogFile
attribute forloadData
,createProcedure
, andcreateView
Change Types - [PR#2228] [Nathan Voxland] Updated the logic of the foreign key names that are not always unique
- [PR#2081] [Jakub Herkel] Fixed OSGI support (manifest and class loading)
- [PR#2192] [Andrii Tytarchuk] Fixed
COLUMN_SIZE
for the PostgreSQLNUMERIC[]
datatype
Contributions
Our community has built a lot. Thanks to everyone who contributes and helps make the Liquibase community strong, including the following first-time contributors:

This release includes community-contributed pull requests, Liquibase Open Source and Liquibase Pro bug fixes, and a new quality checks functionality.
Here is a closer look at what we improved in the latest release.
Notable Changes
Liquibase 4.6.2 introduces the multiple objects quality check that allows you to define and check the naming pattern for multiple types of objects rather than one type of object. For example, you do not want to have a dash in the table, column, and sequence names. With the multiple objects check, you can specify a pattern to check for dashes and choose tables, columns, and sequences as the objects to check. In version 4.6.2, the check is available for:
- Table
- Column
- Sequence
Note: For more information, see Multiple Objects Quality Check [DAT-8444]

Liquibase 4.6.2 includes the liquibase.sql.logLevel
configuration option to control the level at which SQL is logged. The default value is FINE
.
You can run the --sql-log-level
parameter with the --log-level <level>
parameter in the CLI:
liquibase --sql-log-level <FINE|INFO|WARNING|SEVERE|OFF> --log-level=<FINE|INFO|WARNING|SEVERE|OFF>
--log-file=log.txt update --changelog-file=<changelog>
You can also set the parameter as follows:

liquibase_libs
directory
When you run Liquibase in the CLI, the executables generate a classpath with the .jar
files from the LIQUIBASE_HOME
and LIQUIBASE_HOME/lib
directories. Liquibase 4.6.2 adds the ability to load an additional directory of liquibase_libs
in the current working directory to the classpath. With the liquibase_libs
directory located in the /lib
directory, projects can have separate extensions, drivers, and versions specific to a project [PR#2015] [mcred]
Enhancements
- [PRO] Added the ability to configure the
DDL_LOCK_TIMEOUT
parameter for Oracle without SQL Plus and define the connection timeout. You can configureDDL_LOCK_TIMEOUT
as follows: liquibase.ddlLockTimeout: <value>
in the Liquibase properties file--ddl-lock-timeout=<value>
as a CLI global parameterLIQUIBASE_DDL_LOCK_TIMEOUT=<int>
as an environment variable [DAT-7649]
- Improved the output of the
SqlUserDefinedPatternCheck
quality check copy [DAT-8492] - [PR#1817] [stalbrecht] Added the
MSSQLDatabase
specific error evaluation when creating DATABASECHANGELOGLOCK table - [PR#2180] [nvoxland] [eldadko] Added support for MySQL function indexes. The PR fixes PR#1626.
- [PR#928] [CORE-931] [RG9] Added support for the
NOT NULL
constraint with an initial default value in theaddColumn
Change Type
Fixes
- [PR#2173] [wwillard7800] [deci260] Fixed the issue with handling multi-column indexes during the JSON snapshot. The PR fixes PR#1260.
- [PR#1793] [janjicandjelka8] Fixed the handling of the
remarks
attribute in a primary key column tag for MariaDB - [PR#1894] [KushnirykOleh] Fixed the time data type to be precise for PostgreSQL. The PR fixes PR#1774.
- [PR#1970] [nvoxland] Fixed the handling of the
addColumn
Change Type in SQLite - [PR#1995] [szandany] Fixed the
generate-changelog
command to generate theNUMERIC[]
data type for PostgreSQL correctly - [PR#1990] [JayWelborn] Fixed the SQL generated by the
alterSequence
Change Type to be compatible with the Oracle, PostgreSQL, MariaDB, and MSSQL databases - [PR#2020] [nvoxland] [dewa-actico] Fixed the handling of nested changelog preconditions. The PR fixes PR#1624.
- Fixed the naming of the checks settings file shown as null if the file was corrupted [DAT-8553]
- [PR#2021] [nvoxland] [zamani84] Fixed the issue with Liquibase escaping the backslash in values stored in objects. The PR fixes PR#1598.
- [PR#2083] [jamey-clari] Enabled the update operations to continue if the DATABASECHANGELOGLOCK table already exists, which helps to serialize all processes following schema creation.
- [PR#2167] [nvoxland] [obovsunivskyii] Fixed the
--verbose
flag used in theunexpected-changesets
command. The PR fixes PR#1987. - [PR#2168] [nvoxland] [gilles-gosuin] Fixed the parsing logic for
YAMLChangelogParser
andchangeLogId
in a Map. The PR fixes PR#1988. - [PR#2102] [prakashseervi] Implemented the handling of the
GENERATED ALWAYS AS
clause while creating a table for PostgreSQL - [PR#2029] [Marcono1234] Fixed the
LOCKGRANTED
column to include time zone information in the DATABASECHANGELOGLOCK table - [PR#2059] [wardvijf] Fixed the support for custom
DB2Database
implementations. The PR fixes PR#2058. - [PR#2171] [logantracyo] Fixed typos in the
ColumnConfig.java
documentation - [PR#2189] [nvoxland] Fixed the classpath to include files with the
relativeToChangelog=true
parameter for Spring Boot - [PR#2216] [tkalmar] Fixed the log message for PostgreSQL versions
- [PRO] Fixed the
snapshot
command failing against CockroachDB with the Liquibase Pro license key applied [DAT-8253] - Fixed the dependency order for a changelog file with the
addPrimaryKey
Change Type generated by thegenerate-changelog
command for PostgreSQL [DAT-8256] - [PRO] Fixed the following environment variables
LIQUIBASE_COMMAND_CHECKS_CONFIGURE_CHECKS_SETTINGS_FILE
,LIQUIBASE_COMMAND_CHECKS_RUN_CHECKS_SETTINGS_FILE
, andLIQUIBASE_COMMAND_CHECKS_SHOW_CHECKS_SETTINGS_FILE
to be detected when running the quality checks commands [DAT-8546] - Fixed the default value of the
strict
parameter. The default value isfalse
. You can set thestrict
parameter as follows:liquibase.strict=false|true
in the Liquibase properties file--strict=false|true
as a CLI parameterLIQUBIASE_STRICT=false|true
as an environment variable [DAT-8547]
- Fixed quality checks reporting only the first failure in a changeset to report all failures found [DAT-8583]
- Fixed the Liquibase Cassandra extension failing when username and password are enabled [LB-2115]
Contributions
Our community has built a lot. Thanks to everyone who contributes and helps make the Liquibase community strong, including the following first-time contributors:

Note: Liquibase 4.6.0 release has the wrong version of the Liquibase Pro XSD
file. Liquibase 4.6.1 release is a patch release that fixes the issue.
Liquibase 4.6.0 Release
This release includes many community-contributed pull requests, Liquibase Open Source and Liquibase Pro bug fixes.
Here is a closer look at what we improved in the latest release.
Notable Changes
Starting with version 4.6.0, the Windows and Mac/Linux Liquibase installers and the .tar.gz
and .zip
installation files include the most common JDBC drivers in the installation package:
- DB2
- Firebird
- H2
- HSQLDB
- PostgreSQL
- MariaDB
- MSSQL
- Oracle
- SQLite
To use the available drivers, see the Adding and Updating Liquibase Drivers documentation. Also, check the page for the cases when you need different drivers. [PR#2031] [DAT-7438]
Note: Since Liquibase 4.6.0 provides driver jar files, the size of the installation package is bigger than the size of the installation package in earlier versions.
Liquibase Pro Changes
- Quality checks have configurable severity and exit codes [DAT-8171]
Tip: For more information, see the Use Quality Checks in Automation: Severity and Exit Code documentation.
- Quality checks include the
bulk-set
command [DAT-8289] -
New quality checks:
- Static check: Warn when a table truncation is detected [DAT-7933]
- Dynamic check: Warn when granting specific privileges [DAT-7972]
- Static check: Warn when the
GRANT WITH ADMIN OPTION
statement is detected [DAT-7955] - Static check: Warn when the
GRANT WITH GRANT OPTION
statement is detected [DAT-7995]
Tip: For more information, see the List of Quality Checks documentation.
- The
liquibase.checks-settings.conf
file is unencoded in version 4.6.0 and later versions for easier inspection that allows you to resolve a merge conflict in source control. Liquibase backs up encoded files in the working directory, and you can still use previous versions by specifying the--checks-settings-file
parameter in the CLI, as an environment variable, or as a property in the Liquibase properties file. [DAT-8473]
Tip: For more information, see the bulk-set documentation.
If you use Liquibase Hub, check the Liquibase Hub DevOps Metrics documentation to learn more about DevOps metrics that provide the data to optimize your DevOps performance.
Enhancements
- [PR#1975] [nvoxland] Changed the XSD default
errorOnMissingOrEmpty
attribute totrue
for theincludeAll
attribute in the XML changelog file. The PR fixes PR#1960. - [PR#1993] [siudeks] Added support for deferrable primary keys in the
createTable
Change Type. The PR fixes PR#1597. - [PR#1986] [alexey-ivanov-official] [parthdesai21google] Added support for the
constraintName
attribute in thedropNotNullConstraint
attribute. Updated theaddNotNullConstraint
rollback logic to pass the constraint name to the generateddropNotNullConstraint
change. The PR fixes PR#1492 and PR#1942. - [PR#2114] [nvoxland] Improved code and added tests in the
liquibase.util
package - [PR#1679] [thomseno] Changed the
datetime
type todatetime2
for thetimestamp
type on SQL Server. - [PR#2144] [matejsp] Changed the default encoding to
UTF-8
. Added a new globalliquibase.fileEncoding
setting, which you can set as--file-encoding=ASCII
in the CLI,liquibase.fileEncoding: ASCII
in the Liquibase properties file (liquibase.properties
), andLIQUIBASE_FILE_ENCODING=ASCII
as an environment variable. The PR fixes PR#1445. - [PRO] Added a message to warn Liquibase Pro users when they have noncompliant Liquibase environment variables if the
strict
attribute is set totrue
[DAT-6946]
Fixes
- [PRO] Fixed the issue with Liquibase 4.4.0 and later versions to prompt if the Liquibase Pro license key is expired or invalid. [DAT-7862]
- [PRO] Fixed Liquibase Pro SQL Plus changesets failures with the Kerberos setup [DAT-8102]
- [PRO] Fixed the
snapshot
command using for CockroachDB with Liquibase Pro license key [DAT-8253] - Fixed an issue with running quality checks on Windows when using a configuration file created on Linux/macOS [DAT-8298]
- Fixed the
ChangesetCommentCheck
check to handle a lack of comments in thetagDatabase
Change Type [DAT-8313] - Fixed the default severity for the existing
liquibase.checks-settings.conf
files [DAT-8328] - Fixed the
customize
andcopy
commands to handle directories with spaces [DAT-8389] - Fixed the
schemas
andincludeSchema
attributes for thegenerate-changelog
command in Liquibase 4.4 and later versions [DAT-8133] - Fixed the quality checks customization issue when using Git Bash [DAT-8392]
- Fixed the message for the quality checks severity customization [DAT-8479]
- Fixed the quality checks halting execution when the checks settings file contains entries for rules which do not exist in the system. Liquibase skips unknown checks and continues the execution. [DAT-8507]
- [PR#1407] [pirocraft] Fixed the issue with Liquibase inserting a wrong default datetime value into MySQL. The PR fixes PR#1395.
- [PR#1415] [Alex1OPS] Fixed the
insert
Change Type with thevalueSequenceNext
andvalueSequenceCurrent
attributes to use the schema specified on a statement level of a changeset. The PR fixes PR#1304. - [PR#1931] [nvoxland] Fixed the issue with Liquibase throwing a null pointer exception in the CLI if the
LicenseService
interface cannot be loaded because of the missingjaxb
dependencies - [PR#2001] [haster] Fixed the
UniqueConstraintSnapshotGenerator
class switching to a bulk query after four unique constraints. The PR fixes PR#1996. - [PR#1973] [doakd] Fixed the issue with Liquibase formatted SQL changesets that are skipped if there is a space in the
--changeset
line. The PR fixes PR#1919. - [PR#104] [nvoxland] Fixed the
drop-all
command failing in the PostgreSQL database when the Liquibase-Cassandra extension is in theliquibase/lib
directory. The PR fixes PR#47. - [PR#2006] [kdenis4] Fixed Liquibase not reading the
liquibaseSchemaName
andliquibaseCatalogName
configuration settings. The PR fixes PR#2000. - [PR#1465] [danielthegray] Fixed the issue with Liquibase incorrectly inserting a long CLOB value in the database. Added integration tests.
- [PR#1974] [gjvoosten] Fixed the issue with Liquibase not handling case-sensitive primary key names in the
dropPrimaryKey
Change Type for PostgreSQL. The PR fixes PR#1933. - [PR#1941] [meisenla] [ckulenkampff] Fixed the
sqlFile
Change Type to handle theencoding
attribute. The PR fixes PR#1760.
Contributions
Our community has built a lot. Thanks to everyone who contributes and helps make the Liquibase community strong, including the following first-time contributors:

This release includes community-contributed pull requests, Liquibase Open Source and Liquibase Pro bug fixes, and support for .
Quality checks allow you to run checks against SQL, XML, JSON, and YAML changelogs for conditions and configurations important to your organization. More quality checks are forthcoming in future releases; provide feedback on what checks matter most to you.
Here is a closer look at what we improved in the latest release.
Notable Changes
There is a new family of commands to use to run quality checks:
liquibase show
to list the available quality checksliquibase run
to run the available quality checks
along with enable
, disable
, customize
, copy
, reset
, and delete
options, and liquibase checks --help
to learn more.
The following is a list of changes related to quality checks:
- Implement
enable
/disable
subcommands [DAT-7794] - Implement
run
subcommand for dynamic rules [DAT-7796] - Implement
customize
subcommand [DAT-7797] - Implement
copy
subcommand [DAT-7798] - Implement
reset
subcommand [DAT-7800] - Implement
show
subcommand for dynamic rules [DAT-7801] - Implement
delete
subcommand [DAT-7803] - STATIC CHECK :: Changeset Must Have A Label [DAT-7924]
- STATIC CHECK :: Changeset Must Have A Context [DAT-7925]
- STATIC CHECK :: Changeset Must Have A Comment [DAT-7926]
- STATIC CHECK :: Warn When "DROP TABLE" Detected [DAT-7928]
- STATIC CHECK :: Warn When "DROP COLUMN" Detected [DAT-7930]
- STATIC CHECK :: Warn When Data Type Modification is Detected [DAT-7934]
- STATIC CHECK :: Warn when 'GRANT' Statement Detected [DAT-7953]
- STATIC CHECK :: Warn when 'REVOKE' Statement Detected [DAT-7954]
- DYNAMIC CHECK :: Warn when Tables have more than n columns [DAT-7983]
- Check for License & Limit gate [DAT-7802]
Resolved Liquibase Issues
- Fail when creating a Scope with a null-parent #1354. #1377Treehopper
- Fixes Postgresql bit column support #1468nderwin
- Fix
OSGiResourceAccessor
failing due tojavax.activation
#1534CMoH - fixed usage of computed values in prepared insert/update changes #1590Plunts
- Ensure that the root scope is initialized correctly regardless of whether a scope manager has been configured yet or not #1768rudolfv
- Fix
UniqueConstraint
snapshot query on db2z #1771dileepan91 generate-changelog
on an Oracle db ignoresdiffIncludeTablespace
when creatingMissingTableChange
#1812briar354- Get Set
deleteCascade
for serializer mapping #1837smith-xyz - Add support for changeset ids and authors with spaces in formatted SQL changelogs. #1845jpz
- More efficient XML resource loading #1860
- Postgresql: Preserve existing
search_path
when setting thedefaultSchemaName
#1864 - Fixed Postgresql
addPrimaryKey
cluster handling #1880 - CLI no longer reading
defaultsFile
from classpath #1893 - Manage parent directory relative to changelog in
includeAll
#1968Cubid - Improve synchronization of
LockServiceFactory
reset #1991 - Fix
createSequence
for H2 whendataType
is specified #1992 - [PRO] Pro Enhancement Request: set '
splitStatements
' to 'false
' for Stored Logic changesets when generating a Formatted SQL changelog [DAT-7391] - [PRO] Allow users to indicate names and location of their spool files when using
runWith:sqlplus
[DAT-7580] - [PRO] Cannot update MariaDB expand based storage after first
liquibase update
[DAT-7879] - [PRO] Liquibase Pro
generate-changelog
error on Postgresql functions that have long signatures containing any '()
' characters [DAT-7894]
Contributions
Our community has built a lot. Thanks to everyone who contributes and helps make the Liquibase community strong, including the following first-time contributors:

This release includes community-contributed pull requests, Liquibase Open Source and Liquibase Pro bug fixes, and enhancements to Liquibase Hub performance and pipelines.
Here is a closer look at what we improved in the latest release.
Notable Changes
In Liquibase 4.4.3, there are improvements to the FileSystemAlreadyExistsException
output message. The original FileSystemNotFoundException
warning was changed to be an info message that does not include logs of stack traces. If you still see stack traces, contact us. #1885dertin
Additionally, we fixed bugs in SQL files: #1798pierre2113
- The
sqlFile
andrelativeToChangelogFile
attributes fail when using thelogicalFilePath
attribute#1277darkcamper - The wrong path received if
relativeToChangelogFile=true
anddatabaseChangeLog
haslogicalFilePath != PhisicalFilePath
#1353kezhevatov
Resolved Liquibase Issues
- Added a separate query for DB2 on AS400, which fixed the
drop-all
command on DB2 for iSeries #1412wardvijf - Fixed the
logicalFilePath
attribute not being serialized #1471tms-91 - Fixed the
SqlParser
bug related to parsing UTF-8 valid symbols #1513matteoturra - Fixed the invalid update SQL generated for HSQL database in
InsertOrUpdateGeneratorHsql.java
#1563devorgpl - Added a validation error when the
customChange
Change Type has no name attribute#1592danielthegray - Fixed the issue with Liquibase failing to create a DATABASECHANGELOGLOCK record and apply changesets into Firebird 3.
isNumericBoolean
now checks theFirebird3Database
instance type and returns Boolean for Firebird 3. #1875koushikd02 - Fixed the issue with escaping question marks in PostgreSQL: #1877juszczakn and goostleek
- Fixed the issue with
ClassCastException
in a standard lock service:java.time.LocalDateTime
cannot be cast tojava.util.Date
#1878jocmer-evooq and haidiiii - Added the MySQL reserved word
CUBE
to the list of Liquibase reserved columns for the schema migration to work.CUBE
is a reserved word as of MySQL 8.0.1 #1515jasonwjones - Added the ability to handle empty lines at the beginning of a formatted SQL #1713smith-xyz
- Fixed loading the
CLOB
data into PostgreSQL. Instead of loading theCLOB
file name, PostgreSQL loads the content of theCLOB
file. #1791jidma - Changed the MD5SUM column value from
RawSqlStatement
toUpdateStatement
#1602biryukovpavel - Fixed synchronization in
ChangeLogHistoryServiceFactory.java
#1361Olard - Fixed the changeset execution failure related to the
DATICAL_SPERRORLOG
table when using therunWith=sqlplus
attribute and executing operations as a user with onlySELECT
,UPDATE
, andINSERT
permissions [DAT-7410] - Combined Liquibase GitHub Action examples into the
liquibase/liquibase-github-action-example
repository [DAT-6679] - Enabled the
drop-all
report to work with a registered changelog with no extra arguments and send the information to Liquibase Hub [DAT-7554] - Renamed the
tablespaceName
parameter toliquibaseTablespaceName
[DAT-7676]
Contributions
Our community has built a lot. This release includes 15 PRs by 17 authors. Thanks to everyone who contributes and helps make the Liquibase community strong, including the following first-time contributors:

This release includes community-contributed pull requests, Liquibase Open Source and Liquibase Pro bug fixes, and enhancements to the drop-all
command and SQL*Plus.
Here is a closer look at what we improved in the latest release.
Known Issues
UniqueConstraintSnapshotGenerator
does not handle more than four unique constraints. The diff
command reports a difference in unique constraints caused by the PostgreSQL database snapshot having fewer unique constraints than the snapshot from another database compared. Also, the issue can cause unreliable diffs and changelog generation for all non-MySQL databases. The fix will be available in the next release. #1996
Resolved Liquibase Open Source Issues
- Changed
NullPointerException
toChangeLogParseException
for the output when there is a typo in achangeSet
node #1593 - Added the
support
method toDatabaseConnection
#1784 - Fixed the issue with handling serial and
bigserial
ifliquibase.convertDataTypes=false
#1883 - Improved the
ConfigurationValueProvider
performance #1952 - Added the ability to allow an empty string for the
defaultValue
attribute#1963 - Reintroduced support for the
-D
arguments in the CLI #1943 - Restored the
update-testing-rollback
command #1939 - Added the Maven goal for
unexpected-changesets
#1972
Resolved Liquibase Pro Issues
- Added the ability to handle special characters in procedures when using the
generate-changelog
command. [DAT-6799] - SQL*Plus: Fixed the issue with formatted SQL changesets and
runwith:sqlplus
being stopped unless Liquibase includes a quit statement. [DAT-7376] - SQL*Plus: Fixed the SQL Plus spool log issue. [DAT-7461]
Additional Resolved Issues
- Extended the
drop-all
command with optionalhubConnectionId
andhubProjectId
attributes. [DAT-6972] - Fixed nested properties and the substitution of variables in YML changelogs. [DAT-7294]
- Implemented the ability to use
connectionjdbcurl
when there is no project or connection ID with thedrop-all
command. [DAT-7388] - Improved the Liquibase Pro License key messaging. [DAT-7036]
- Added the ability to handle a declined auto-registration when running the
drop-all
command. [DAT-7489] - Fixed auto-registration issues. [DAT-7505]
Note: For more information, check our drop-all command documentation.
Contributions
Our community has built a lot. Thanks to everyone who contributes and helps make the Liquibase community strong!
- danielthegray#1593 Changed
NullPointerException
toChangeLogParseException
for the output when there is a typo in achangeSet
node - alexandru-slobodcicov#1784 Added the
support
method toDatabaseConnection
- szandany:
- stuartwdouglas and pmancaux#1952 Improved the
ConfigurationValueProvider
performance - ZwoCa#1963 Added the ability to allow an empty string for the
defaultValue
attribute - Gama11#1943 Reintroduced support for the
-D
arguments in the CLI - chornota#1939 Restored the
update-testing-rollback
command

For release notes, visit: v4.4.1

For release notes, visit: v4.4.0

For release notes, visit: v4.3.5

For release notes, visit: v4.3.4

For release notes, visit: v4.3.3

For release notes, visit: v4.3.2

For release notes, visit: v4.3.1

For release notes, visit: v4.3.0

For release notes, visit: v4.2.2

For release notes, visit: v4.2.1

For release notes, visit: v4.2.0

For release notes, visit: v4.1.1

For release notes, visit: v3.10.3

For release notes, visit: v4.1.0

For release notes, visit: v3.10.2

For release notes, visit: v4.0.0

For release notes, visit: v4.0.0-beta2

For release notes, visit: v3.10.1

For release notes, visit: v3.10.0

For release notes, visit: v3.9.0

For release notes, visit: v4.0.0-beta1

For release notes, visit: v3.8.9

For release notes, visit: v3.8.8

For release notes, visit: v3.8.7

For release notes, visit: v3.8.6

For release notes, visit: v3.8.5

For release notes, visit: v3.8.4

For release notes, visit: v3.8.3

For release notes, visit: v3.8.2

For release notes, visit: v3.8.1

For release notes, visit: v3.8.0

For release notes, visit: v3.7.0

For release notes, visit: v3.6.3

For release notes, visit: v3.6.2

For release notes, visit: v3.6.1

For release notes, visit: v3.6.0

For release notes, visit: v3.6.0-beta1

For release notes, visit: v3.5.5

For release notes, visit: v3.5.4

For release notes, visit: v3.5.3

For release notes, visit: v3.5.2

For release notes, visit: v3.5.1

For release notes, visit: v3.5.0

For release notes, visit: v3.4.2

For release notes, visit: v3.4.1

For release notes, visit: v3.4.0

For release notes, visit: v3.3.5

For release notes, visit: v3.3.4

For release notes, visit: v3.3.3

For release notes, visit: v3.3.2

For release notes, visit: v3.3.1

For release notes, visit: v3.3.0

For release notes, visit: v3.2.3

For release notes, visit: v3.1.1

For release notes, visit: v3.0.8

For release notes, visit: v2.0.5

For release notes, visit: v1.9.5