Liquibase 3.0.0 Released

At long last, I’m happy to announce that Liquibase 3.0.0 is finally out!

There has been a lot of changes and a lot of work put into 3.0, but the major highlights are:

Additional extension support 

Starting with Liquibase 2.0, moving to a plugin/extension model has been a major focus of development. With 3.0 we focused on adding extension support for the database snapshot and comparison logic as well as for the DatabaseChangeLogLock code. The new extension support gives the ability to dynamically add snapshot support for additional database object types, control how those types are compared across databases, modify the logic used for comparing standard liquibase types, manage how fixes for differences in new and existing types are represented in generated changelogs, and much much more.

The general strategy for Liquibase is to have the core library easily support the 80% of functionality that is common across databases and across users, with built in features like contexts, changelog parameters, and modifySql that will cover up to 95% of use cases. Extensions will address the final 5% of use cases that are always very company specific and often contradictory to what other users expect.

The release timelines for 2.0 and 3.0 were much longer than I would have liked in large part because I was trying to build up the architecture to support the extension points people need. Now that 3.0 is out, the plan is to go back to a much smaller release cycle with more manageable feature changes and bug fixes while also better seeding and managing the community extensions.

For more information on extension support in Liquibase, visit the extension portal. Documentation is still lighter than I would like, but more will be coming.

Additional integration support

For those integrating with the Liquibase Java API, there is now more metadata available from Change classes as well as separated and better organized “diff” and “snapshot” logic.

End user improvements

For the normal user, Liquibase 3.0.0 adds:

  • Support for preconditions in formatted SQL changelogs
  • YAML and JSON changelog support
  • Support for “catalog” attributes in all applicable change commands  in addition to the existing “schema” attribute
  • Better support for case sensitive databases
  • Maven now supports the generateChangeLog command
  • Ability to specify sequences to read values from on <insert>
  • Performance improvements
  • Support ${} params in formatted SQL
  • Improved Informix support
  • Improved OSGi support
  • Improved UTF8 support
  • Can now use JDBC escape syntax in SQL
  • “dbms” attribute supports NOT syntax (using ‘!’)
  • Added futureRollbackCountSQL command
  • Tablespace can be defined for liquibase tables
  • Added ability to SKIP columns in a CSV file
  • Many bug fixes

Upgrading to 3.0

For the normal Liquibase user, version 3.0.0 is a drop in replacement for any of the 2.x releases. For extension developers and integrators, there has been some changes to the Java APIs that may impact your code. Those changes will be documented at liquibase.org/v3_upgrade.html. Liquibase 3.0 now requires Java 1.6+.

 

Downloading 3.0

As always, you can download Liquibase from liquibase.org/download and direct any comments or questions to http://forum.liquibase.org.

The raw Jira release notes are available at https://liquibase.jira.com/secure/ReleaseNote.jspa?projectId=10020&version=10020

12 Comments

  1. Arlo:

    Has the new version already been deployed to Maven Central?

    I am anxious to test the new version :)

  2. Nathan Voxland:

    Apparently in my excitement to actually release 3.0 I had missed “deploy to maven repository” step. It should be working its way through now, hopefully should be available in an hour or two.

    Sorry for the delay

  3. zmitrok:

    FWIW, 3.0.0 release is still not on maven central.

  4. Nathan Voxland:

    Maven…. Trying again…

  5. bera:

    Hi guys!

    great job! would be nice to have it deployed on the maven central :)

  6. Trigve:

    Hi,
    as first, congratulations for new version :)

    I like this new feature from the higlights: “Tablespace can be defined for liquibase tables”. I’ve searched for documentation but couldn’t find where the tablespace could be defined. Or it is only exported through API? And does this new feature means the liquibase tables could be in separate tablespace/schema?

    Thanks

  7. Nathan Voxland:

    The tablespace logic is around being able to specify tablespaces when creating tables, primary keys, etc. See http://www.liquibase.org/documentation/changes/create_table.html which now has a “tablespace” attribute that wasn’t there in 2.x. (Apparently I need to add the “since” column on thee).

  8. Trigve:

    Thanks for reply…

    Ah I see now. What I was looking for is https://liquibase.jira.com/browse/CORE-1225. I see that it resloved/closed now but it looks like it is implemented in the “API level”. Am I right?

    Thanks

  9. Nathan Voxland:

    Yeah, I thought it was added into the integrations but apparently it is not yet. I reopened the issue.

  10. Nathan Voxland:

    3.0.0 seems to have worked its way through the maven repositories now. Just takes a while apparently.

  11. Draven:

    Is there any documentation to “formatted SQL, preconditions”
    I´ve seen that they are supported since Version 3.0 but i couldn´t find it anywhere.

  12. Nathan Voxland:

    The formatted sql docs is at http://www.liquibase.org/documentation/sql_format.html

Leave a comment