Sobes.tech
Middle

What is your experience with Liquibase?

sobes.tech AI

Answer from AI

Experience with Liquibase includes:

  • Database schema version control: Using changelog files (XML, YAML, JSON) for DDL and DML scripts.
  • Migration automation: Integrating Liquibase into CI/CD pipelines for automatic schema changes application during releases.
  • Working with various databases: Experience applying Liquibase with PostgreSQL, MySQL, and Oracle.
  • Rollbacks: Creating and testing rollback scripts (rollback or tag).
  • Command line usage: Executing migrations, generating changelog files, and checking status.

Example of a changelog file structure:

<!-- /changelog.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.0.xsd">

    <include file="changeset/create_users_table.xml" relativeToChangelogFile="true"/>
    <include file="changeset/add_index_to_users_table.xml" relativeToChangelogFile="true"/>

</databaseChangeLog>

Example of a changeset:

<!-- /changeset/create_users_table.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.0.xsd">

    <changeSet id="create-users-table" author="devops-engineer">
        <createTable tableName="users">
            <column name="id" type="INT">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="username" type="VARCHAR(50)">
                <constraints nullable="false" unique="true"/>
            </column>
            <column name="created_at" type="TIMESTAMP WITHOUT TIME ZONE" defaultValueComputed="CURRENT_TIMESTAMP"/>
        </createTable>
        <rollback>
            <dropTable tableName="users"/>
        </rollback>
    </changeSet>

</databaseChangeLog>

Command line usage:

# Apply all available changes
liquibase update

# Generate a script for manual application
liquibase updateSQL > update.sql

# Rollback to a specific tag
liquibase rollback <tag_name>

# Show change status
liquibase status

Working with reference tables and test data via loadData.

Typical Liquibase usage scenarios:

  • Deploying new application versions.
  • Fixing database errors.
  • Creating test environments.

Main advantages of using Liquibase:

  • Database schema version control.
  • Independence from specific DBMS.
  • Ability to rollback changes.
  • Easy integration into CI/CD.