Liquibase stores all database changes in the individual ChangeSet, the best practice is to specify only one type of change per ChangeSet record. Liquibase migrator executes ChangeSet sequentially, and only skips if preconditions, contexts or labels attributes are mentioned or if execution aborted due to error.
but some times requirement is to skip a ChangeSet, or certain ChangeSet should not run on Liquibase update, but should be in changelog file for tracking purpose. one way is to manually delete or comment out the ChangeSet and after updatation revert back to the original state, but this is very error-prone, to deal with this situation, Liquibase provides ignore attribute. ChangeSet with ignore attribute as true will be skipped by Liquibase migrator as it doesn't exist. by default ignore attribute has value as false.
changelog.mysql.sql
-- liquibase formatted sql
-- changeset :1692502428217-1
CREATE TABLE appledb.apple (apple_id BIGINT NOT NULL, apple_name VARCHAR(255) NULL, CONSTRAINT PK_APPLE PRIMARY KEY (apple_id));
-- changeset :1692502428217-2
INSERT INTO appledb.apple (apple_id, apple_name) VALUES (1, 'Macintosh');
-- changeset :1692502428217-3 ignore:true
INSERT INTO appledb.apple (apple_id, apple_name) VALUES (2, 'Fuji');changelog.mysql.xml
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd
http://www.liquibase.org/xml/ns/pro http://www.liquibase.org/xml/ns/pro/liquibase-pro-latest.xsd
http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
<changeSet author=" wesome (generated)" id="1692502413038-1">
<createTable catalogName="appledb" tableName="apple">
<column name="apple_id" type="BIGINT">
<constraints nullable="false" primaryKey="true" />
</column>
<column name="apple_name" type="VARCHAR(255)" />
</createTable>
</changeSet>
<changeSet author=" wesome (generated)" id="1692502413038-2">
<insert catalogName="appledb" tableName="apple">
<column name="apple_id" valueNumeric="1" />
<column name="apple_name" value="Macintosh" />
</insert>
</changeSet>
<changeSet author=" wesome (generated)" id="1692502413038-3" ignore="true">
<insert catalogName="appledb" tableName="apple">
<column name="apple_id" valueNumeric="2" />
<column name="apple_name" value="Fuji" />
</insert>
</changeSet>
</databaseChangeLog>changelog.mysql.yaml
databaseChangeLog:
- changeSet:
id: 1692502436866-1
author:wesome (generated)
changes:
- createTable:
catalogName: appledb
columns:
- column:
constraints:
nullable: false
primaryKey: true
name: apple_id
type: BIGINT
- column:
name: apple_name
type: VARCHAR(255)
tableName: apple
- changeSet:
id: 1692502436866-2
ignore: true
author:wesome (generated)
changes:
- insert:
catalogName: appledb
columns:
- column:
name: apple_id
valueNumeric: 1
- column:
name: apple_name
value: Macintosh
tableName: apple
- changeSet:
id: 1692502436866-3
author:wesome (generated)
changes:
- insert:
catalogName: appledb
columns:
- column:
name: apple_id
valueNumeric: 2
- column:
name: apple_name
value: Fuji
tableName: applechangelog.mysql.json
{
"databaseChangeLog": [
{
"changeSet": {
"id": "1692502447470-1",
"author": "wesome (generated)",
"changes": [
{
"createTable": {
"catalogName": "appledb",
"columns": [
{
"column": {
"constraints": {
"nullable": false,
"primaryKey": true
},
"name": "apple_id",
"type": "BIGINT"
}
},
{
"column": {
"name": "apple_name",
"type": "VARCHAR(255)"
}
}
],
"tableName": "apple"
}
}
]
}
},
{
"changeSet": {
"id": "1692502447470-2",
"ignore": "true",
"author": "wesome (generated)",
"changes": [
{
"insert": {
"catalogName": "appledb",
"columns": [
{
"column": {
"name": "apple_id",
"valueNumeric": 1
}
},
{
"column": {
"name": "apple_name",
"value": "Macintosh"
}
}
],
"tableName": "apple"
}
}
]
}
},
{
"changeSet": {
"id": "1692502447470-3",
"author": "wesome (generated)",
"changes": [
{
"insert": {
"catalogName": "appledb",
"columns": [
{
"column": {
"name": "apple_id",
"valueNumeric": 2
}
},
{
"column": {
"name": "apple_name",
"value": "Fuji"
}
}
],
"tableName": "apple"
}
}
]
}
}
]
}liquibase.properties (update changeLogFile file format with SQL, XML, YAML, JSON as per changelog.mysql.<format>)
changeLogFile=changelog.mysql.xml
liquibase.command.url:jdbc:mysql://localhost:3306/AppleDb?createDatabaseIfNotExist=true&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
liquibase.command.username: root
liquibase.command.password: rootroot