11 Ekim 2022 Salı

Liquibase Kullanımı

Giriş
Liquibase daha çok SpringBoot ile kullanılıyor ancak tek başına kullanım da mümkün. Bir örnek burada

Gradle
Şöyle yaparız
plugins {
id 'org.liquibase.gradle' version '2.1.1' } dependencies { liquibaseRuntime group: 'org.liquibase', name: 'liquibase-core', version: '4.2.2' liquibaseRuntime group: 'com.microsoft.sqlserver', name: 'mssql-jdbc', version: '10.2.0.jre11' }
build.gradle dosyasında şöyle yaparız
liquibase {
  activities {
    def liquibaseUrl = project.hasProperty('liquibaseUrl') ? liquibaseUrl : null
    def liquibaseUsername = project.hasProperty('liquibaseUsername') ? liquibaseUsername : null
    def liquibasePassword = project.hasProperty('liquibasePassword') ? liquibasePassword : null
    main {
      changeLogFile 'change-log.sql'
      url liquibaseUrl
      username liquibaseUsername
      password liquibasePassword
    }
  }
}
Çalıştırmak için şöyle yaparız
./gradlew update -PliquibaseUrl="<jdbc-connection-string>" -PliquibaseUsername="<jdbc-username>" -PliquibasePassword="<jdbc-password>"

ChangeLog Nedir?
Açıklaması şöyle. Yani changeset dosyalarını içeren ana dosyadır
A Liquibase changelog is typically a file that contains a list of changesets. A changeset is a group of database changes that are intended to be applied together as a unit. Each changeset includes the details of the changes to be made, such as the SQL statements to be executed or the database objects to be created or modified.
ChangeLog şu formatlarda olabilir
XML
SQL
JSON
YAML
ChangeSet Nedir?
Açıklaması şöyle. Liquibase hangi changeset'in uygulandığını takip eder. Dolayısıyla changeset geri sarılabilir.
... liquibase allows developers to define their database changes in a database-agnostic format, so that the exact changelogs can be used to update different database types, such as MySQL, Oracle, or PostgreSQL. This makes it easier to support multiple database platforms and automate the process of applying changes to a database.

XML
Örnek
Şöyle yaparız. Burada bir tablo yaratılıyor ve satır ekleniyor
<?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-3.8.xsd"> <changeSet id="create-table" author="liquibase"> <createTable tableName="my_table"> <column name="id" type="int" autoIncrement="true"/> <column name="name" type="varchar(255)"/> <column name="description" type="varchar(255)"/> </createTable> </changeSet> <changeSet id="insert-row" author="liquibase"> <insert tableName="my_table"> <column name="name" value="Example name"/> <column name="description" value="Example description"/> </insert> </changeSet> </databaseChangeLog>
Örnek
changeSet tag içinde yapılabilece tablo işlemleri şöyle
<createTable tableName="customers">
  <column name="id" type="int" autoIncrement="true">
    <constraints primaryKey="true" nullable="false"/>
  </column>
  <column name="name" type="varchar(255)"/>
  <column name="email" type="varchar(255)"/>
  <column name="created_at" type="timestamp" defaultValueComputed="CURRENT_TIMESTAMP"/>
</createTable>

<addColumn tableName="customers">
  <column name="address" type="varchar(255)"/>
</addColumn>

<modifyDataType tableName="customers" columnName="name" newDataType="varchar(100)"/>

<insert tableName="customers">
  <column name="name" value="John Smith"/>
  <column name="email" value="john@example.com"/>
</insert>

<update tableName="customers" where="email = 'john@example.com'">
  <column name="name" value="John Doe"/>
</update>

<delete tableName="customers" where="email = 'john@example.com'"/>
changeSet tag içinde yapılabilecek view işlemleri şöyle
<createView viewName="customer_names">
  SELECT name FROM customers;
</createView>

<dropView viewName="customer_names"/>
changeSet tag içinde yapılabilecek stored procedure ve trigger işlemleri şöyle
<createProcedure procedureName="get_customer_by_id">
  CREATE PROCEDURE get_customer_by_id(IN customer_id INT)
  BEGIN
    SELECT * FROM customers WHERE id = customer_id;
  END
</createProcedure>

<dropProcedure procedureName="get_customer_by_id"/>

<createTrigger triggerName="customer_insert_trigger" beforeInsert="true"
  tableName="customers">

SQL
Örnek
Şöyle yaparız
--liquibase formatted sql

--changeset user1:id1
CREATE TABLE Car (
id INT PRIMARY KEY,
make VARCHAR(100)
);
Örnek
Şöyle yaparız. Burada bir tablo yaratılıyor ve satır ekleniyor
--liquibase formatted sql
--changeset liquibase:create-table
CREATE TABLE my_table (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255),
  description VARCHAR(255)
);

--changeset liquibase:insert-row
INSERT INTO my_table (name, description)
VALUES ('Example name', 'Example description');
JSON
Örnek
Şöyle yaparız. Burada bir tablo yaratılıyor ve satır ekleniyor
{
  "databaseChangeLog": {
    "changeSet": [
      {
        "id": "create-table",
        "author": "liquibase",
        "createTable": {
          "tableName": "my_table",
          "column": [
            {
              "name": "id",
              "type": "int",
              "autoIncrement": true
            },
            {
              "name": "name",
              "type": "varchar(255)"
            },
            {
              "name": "description",
              "type": "varchar(255)"
            }
          ]
        }
      },
      {
        "id": "insert-row",
        "author": "liquibase",
        "insert": {
          "tableName": "my_table",
          "column": [
            {
              "name": "name",
              "value": "Example name"
            },
            {
              "name": "description",
              "value": "Example description"
            }
          ]
        }
      }
    ]
  }
}
YAML
Örnek
Şöyle yaparız. Burada bir tablo yaratılıyor ve satır ekleniyor
databaseChangeLog:
  changeSet:
  - id: create-table
    author: liquibase
    createTable:
      tableName: my_table
      column:
      - name: id
        type: int
        autoIncrement: true
      - name: name
        type: varchar(255)
      - name: description
        type: varchar(255)
  - id: insert-row
    author: liquibase
    insert:
      tableName: my_table
      column:
      - name: name
        value: Example name
      - name: description
        value: Example description

Hiç yorum yok:

Yorum Gönder