• Записи 162
  • Теги 66
  • Комментарии 330

Компьютерное

Как преобразовать дамп базы данных в другую СУБД

Занимаясь разработкой форумного движка Intellect Board, я столкнулся с двумя задачами:


  • нужно отслеживать изменения в структуре БД для выпуска обновлений

  • преобразовывать скрипт с SQL-операторами создания таблиц для MySQL в SQL для Postgres, SQLite, и, возможно, других СУБД.


И то, и другое — задачи весьма рутинные, и хотелось бы их автоматизировать. Довольно долго я искал решения для этого, но попалась только утилита mysqldiff (весьма неудобная и с множеством ограничений) и ряд платных программ, использование которых для меня неприемлемо.


Недавно я нашел модуль для Perl и набор готовых утилит к нему, который помог мне решить эти задачи. Модуль называется SQL::Translator.


Установить его можно через cpan:


cpan install SQL::Translator

Далее можно либо сделать скрипт на языке Perl, который будет выполнять необходимые преобразования, либо использовать одну из готовых утилит: sqlt и sqlt-diff.
Утилита sqlt позволяет преобразовать файл из одного формата в другой. Исходный формат указывается после ключа -f, кончный — после -t. Например, конвертация из MySQL в SQLite выглядит так:
sqlt -f MySQL -t SQLtie исходный_файл.sql > конечный_файл.sql

Преобразование из PostgreSQL в MySQL — так:


sqlt -f PostgreSQL -t MySQL исходный_файл.sql > конечный_файл.sql

Кроме различных SQL-диалектов, поддерживаются еще JSON, Yaml, XML и ряд других.


Отслеживать изменения в структуре БД можно с помощью sqlt-diff. К сожалению, работает она только с дампами, а сравнивать дамп и то, что есть на сервере, не может.
Работать с ней весьма просто:


sqlt-diff файл1.sql=СУБД файл2.sql=СУБД > файл_изменний.sql

В результате выполнения будет создан файл с SQL-операторами ALTER TABLE, CREATE TABLE и DROP TABLE, позволяющий привести структуру базы данных из файла1 к структуре файла2.

1 комментарий:

4X_Pro
0

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

Написать комментарий


Задать вопрос