Применение Liquibase для конвертации схемы базы

Думаю, многие из вас слышали о Liquibase - библиотеке с открытым исходным кодом (Apache 2.0 License), позволяющей хранить, отслеживать и применять изменения баз данных. А кто-то, наверняка, использовал её для рефакторинга базы. Сегодня поговорим от нетипичном применении этой утилиты - конвертации схемы базы.

В процессе разработки любого ПО (особенно, если оно изначально разрабатывалось под требования конкретного заказчика), рано или поздно может подняться вопрос о переносе функционала на другую платформу.

Скажите, ваше приложение может хранить данные в MS SQL Server? У нас нет возможности нанять отдельного DBA для обслуживания PostgreSQL!

Капризный заказчик

Загрузите мне модель данных в Oracle Data Modeler

Аналитик

Хорошо, если решение изначально проектировалось под использование нескольких СУБД. Или СУБД обладает возможностями для хранения данных во внешней базе (как, например, OpenEdge Data Server for Oracle). Но что делать остальным? Искать решение в Интернете? Самостоятельно писать конвертер, делая маппинг таблиц и полей, сопоставляя типы данных?

Сгладить суровые будни разработчика поможет библиотека Liquibase, предназначенная для управления версионностью базы.

Liquibase

С помощью Liquibase достаточно создать первоначальный снимок схемы базы в XML-формате, который затем может быть выгружен в виде дампа SQL.

Ниже приведен пример для базы PostgreSQL, мигрирующей в Oracle.

  1. Скачать liquibase: http://download.liquibase.org, распаковать. Утилита кроссплатформенная, написана на Java.

    Желающие использовать Liquibase в составе собственного решения, могут клонировать проект с GitHub (https://github.com/liquibase)
  2. При необходимости - подсунуть нужные JDBC-драйвера в lib. Перечень поддерживаемых СУБД есть на сайте рахработчика.
  3. Сгенерировать changelog исходной базы:

    ./liquibase --url=jdbc:postgresql://127.0.0.1:5432/demo \
        --driver=org.postgresql.Driver --username="user" \
        --password="password" \
        --changeLogFile=demo.changelog.xml generateChangeLog
                 
  4. На основе сформированного changelog-файла сделать дамп в формате SQL.
    ./liquibase --url=offline:oracle --changeLogFile=demo.changelog.xml updateSQL > changelog.sql
                
  5. Схема готова к загрузке. Обратите внимание, что данный способ не конвертирует хранимые процедуры и триггеры.