We are upgrading from Liquibase 3.3.2 to version 4.4.3.
We have a Postgres database created from changesets defined in Liquibase 3.3.2. Running the version 3.3.2 validate command against this database and pointing to our master changelog file shows the message “No validation errors found” - as expected.
However, running the equivalent validate command using the 4.4.3 version of Liquibase against the same Postgres database and same master changelog file shows the message “300 change sets have changed since they were ran against the database”. (NB: There have been no database changes (new changesets) in between running the two commands.)
Example output:
$ liquibase-4.4.3\liquibase.bat --changelog-file=masterChangeLog.xml --url=jdbc:postgresql://localhost:38000/[databaseName] --driver-properties-file=liquibase.properties validate
Starting Liquibase at 15:38:40 (version 4.4.3 #53 built at 2021-08-05 18:32+0000)
Liquibase Version: 4.4.3
Liquibase Community 4.4.3 by Datical
Validation Error:
300 change sets have changed since they were ran against the database
ChangeLog-6.1.0.xml::[changesetName1]::[username] was: 7:b135dc4c148a772d6c6f9b65eb8f81ab but is now: 8:745d7f24706f71f4ebe37973afde398c
ChangeLog-6.1.0.xml::[changesetName2]::[username] was: 7:cb6cb2cd402ae5193748eb82a872d9ba but is now: 8:71adf6ff457d112cc15f83e16de5dc92
...etc.
...etc.
I have noticed that there appears to be some sort of algorithm version change in the md5sumbefore and after values, e.g. "7:..." versus "8:...".
How should I proceed before using the 4.4.3 version of the update command?
I don’t know anything about an algorithm change, but you could run the clearCheckSums to remove the MD5SUMs, then run update which will recalculate them.
I think the main change was that the algorithm version (i.e. 7: > 8: ) changed, but it looks like that did also affect the rest of the checksum
Obviously knowing what and why doesn’t necessarily help you but I thought that might be useful info.
One other option for proceeding with this is to include the <validCheckSum> tag for every changeset with the old checksum value, however if you have 300 changesets then that’s obviously a lot of effort.
If you do go down the route of using the clearCheckSums command that daryldoak mentioned then I’d suggest testing it on a non-production db first and also make sure that you run it on a db that you know is already up to date so that when you run update again after clearing the checksums it will just re-populate the new checksums and won’t try to run any new changesets.