Skip to content

Latest commit

 

History

History
309 lines (278 loc) · 10.3 KB

index.md

File metadata and controls

309 lines (278 loc) · 10.3 KB
layout title includeDaticalBox
default
Liquibase
true
<script> $(function() { $( "#changelog-tabs" ).tabs(); }); </script>

Source Control For Your Database: Liquibase is an open source, database-independent library for tracking, managing and applying database changes

Works With You

Get Started

  1. Download Liquibase
  2. Create new changelog file in XML, YAML, JSON or SQLformat
  3. Add changeset to changelog file
  4. Run liquibase update
  5. Commit changelog file to source control
  6. GOTO 3
Quick Start Guide | Full Documentation

Refactor Your Database

Open and Extensible

  • Open Source: Apache 2.0 License
  • Extension support allows you to extend and override virtually every part of Liquibase
  • Java APIs for executing and embedding
{% highlight xml %}

<preConditions>
    <runningAs username="liquibase"/>
</preConditions>

<changeSet id="1" author="nvoxland">
    <createTable tableName="person">
        <column name="id" type="int" autoIncrement="true">
            <constraints primaryKey="true" nullable="false"/>
        </column>
        <column name="firstname" type="varchar(50)"/>
        <column name="lastname" type="varchar(50)">
            <constraints nullable="false"/>
        </column>
        <column name="state" type="char(2)"/>
    </createTable>
</changeSet>

<changeSet id="2" author="nvoxland">
    <addColumn tableName="person">
        <column name="username" type="varchar(8)"/>
    </addColumn>
</changeSet>
<changeSet id="3" author="nvoxland">
    <addLookupTable
        existingTableName="person" existingColumnName="state"
        newTableName="state" newColumnName="id" newColumnDataType="char(2)"/>
</changeSet>

{% endhighlight %}

{% highlight yaml %} databaseChangeLog: - preConditions: - runningAs: username: liquibase
  • changeSet: id: 1 author: nvoxland changes: - createTable: tableName: person columns: - column: name: id type: int autoIncrement: true constraints: primaryKey: true nullable: false - column: name: firstname type: varchar(50) - column: name: lastname type: varchar(50) constraints: nullable: false - column: name: state type: char(2)

  • changeSet: id: 2 author: nvoxland changes: - addColumn: tableName: person columns: - column: name: username type: varchar(8)

  • changeSet: id: 3 author: nvoxland changes: - addLookupTable: existingTableName: person existingColumnName:state newTableName: state newColumnName: id newColumnDataType: char(2)

{% endhighlight %}

{% highlight json %} { "databaseChangeLog": [ { "preConditions": [ { "runningAs": { "username": "liquibase" } } ] },
    {
        "changeSet": {
            "id": "1",
            "author": "nvoxland",
            "changes": [
                {
                    "createTable": {
                        "tableName": "person",
                        "columns": [
                            {
                                "column": {
                                    "name": "id",
                                    "type": "int",
                                    "autoIncrement": true,
                                    "constraints": {
                                        "primaryKey": true,
                                        "nullable": false
                                    },
                                }
                            },
                            {
                                "column": {
                                    "name": "firstname",
                                    "type": "varchar(50)"
                                }
                            },
                            {
                                "column": {
                                    "name": "lastname",
                                    "type": "varchar(50)"
                                    "constraints": {
                                        "nullable": false
                                    },
                                }
                            },
                            {
                                "column": {
                                    "name": "state",
                                    "type": "char(2)"
                                }
                            }
                        ]
                    }
                }
            ]
        }
    },

    {
        "changeSet": {
            "id": "2",
            "author": "nvoxland",
            "changes": [
                {
                    "addColumn": {
                        "tableName": "person",
                        "columns": [
                            {
                                "column": {
                                    "name": "username",
                                    "type": "varchar(8)"
                                }
                            }
                       ]
                    }
                }
            ]
        }
    },

    {
        "changeSet": {
            "id": "3",
            "author": "nvoxland",
            "changes": [
                {
                    "addLookupTable": {
                        "tableName": "person",
                        "existingTableName": "person",
                        "existingColumnName":"state",
                        "newTableName": "state",
                        "newColumnName": "id",
                        "newColumnDataType": "char(2)",
                    }
                }
            ]
        }
    }
]

}

{% endhighlight %}

{% highlight sql %} --liquibase formatted sql

--changeset nvoxland:1 create table person ( id int not null primary key, firstname varchar(80), lastname varchar(80) not null, state varchar(2) );

--changeset nvoxland:2 alter table person add column username varchar(8)

--changeset nvoxland:3 create table state AS SELECT DISTINCT state AS id FROM person WHERE state IS NOT NULL; alter table state modify id char(2) NOT NULL; alter table state add primary key(id); alter table person add constraint fk_person_state foreign key (state) references state(id);

{% endhighlight %}