Search code examples
initializationliquibase

How to run liquibase changelogSyncSQL or changelogSync up to a tag and/or labels?


I'm adding liquibase to an existing project where tables and data already exist. I would like to know how I might limit the scope of changelogSync[SQL] to a subset of available changes.

Background

I've run liquibase generateChangeLog to capture the current state and placed this into say src/main/resources/db/changelog/changes/V2021.04.13.00.00.00__init01.yaml.

I've also added another changeset to cover some new requirements in a new file. Let's call it src/main/resources/db/changelog/changes/V2021.04.13.00.00.00__new-feature.yaml.

I've added a main changelog file src/main/resources/db/changelog/db.changelog-master.yaml with the following contents:

databaseChangeLog:
  - includeAll:
      path: changes
      relativeToChangelogFile: true

I now want to ensure that when I run liquibase changelogSync[SQL] against a particular version of the db that the scope is limited to the first changelog init01, thereby allowing from that point on a liquibase update or updateToTag et al, to continue with changes following init01.

I'm surprised to see that the changelogSync[SQL] commands don't seem to offer some way (that I can see from the docs for how to do this.

Besides printing the SQL and manually changing it, is there something I've missed? Any suggested approaches welcome. Thanks!


Solution

  • As it stands, the only solution I've found is to generate the SQL and then manually edit its contents to filter the change sets which don't correspond to your current schema.

    Then you can apply the sql to the db.