Datenbankmigration mit Liquibase

Wer kennt folgendes Problem nicht: Man entwickelt ein System, das eine Datenbank nutzt und entwickelt zwar wunderbar unter Versionskontrolle, jedoch läuft die Datenbankentwicklung „nebenher“. Das Datenbankschema wird direkt z. B. unter phpmyadmin entwickelt. Das funktioniert bei einem Entwickler möglicherweise noch ganz wunderbar, sobald aber mehrere daran arbeiten, verliert man schnell den Überblick. Für die Implementierung einer eigenen Lösung fehlt natürlich die Zeit und das verwendete Framework (z. B. Zend) hat natürlich von Haus aus auch keine Lösung parat. Mit dem Datenbankmigrationstool Liquibase kann man solchen Problemen aus dem Weg gehen.Das Datenbankschema wird in Form einer XML beschrieben und Liquibase spielt diese Änderungen schließlich in die Datenbank ein. So eine XML kann z. B. folgendermaßen aussehen:

<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-2.0.xsd">
 
  <include file="001.setup.xml"/>
  <include file="002.changes.xml"/>
  <include file="003.changes.xml"/>
 
</databaseChangeLog>

Man kann also alle Änderungen nach und nach in dieser XML-Datei ergänzen. Eine Tabelle kann man beispielsweise folgendermaßen anlegen:

<?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-2.0.xsd">
  <changeSet author="CHANGEME" id="CHANGEME">
    <createTable tableName="person">
      <column name="id" type="int" autoIncrement="true">
        <constraints primaryKey="true" nullable="false" />
      </column>
      <column name="varchar_column" type="varchar(255)" />
      <column name="unique_column" type="varchar(50)">
        <constraints unique="true" nullable="false" />
      </column>
      <column name="int_column" type="int" />
      <column name="decimal_column" type="decimal(12,2)" />
      <column name="text_column" type="text" />
      <column name="timestamp_column" type="timestamp" />
      <column name="datetime_column" type="datetime" />
    </createTable>
  </changeSet>
</databaseChangeLog>

Das tolle ist, dass Liquibase die wichtigsten Datenbanken unterstützt. Der Zugriff auf die Datenbanken erfolgt per JDBC. Man benötigt also einen passenden Treiber. Man das Tool auf verschiedene Arten ausführen z. B. über Konsole, Ant, Maven. Auf der Webseite gibt es ein recht einfaches Quickstart-Tutorial.

Ein Gedanke zu “Datenbankmigration mit Liquibase

  1. Pingback: Zend Framework und Liquibase | Tobias Seckinger

Kommentar verfassen