Преамбула: Миграция с устаревающих СУБД — частая задача в ИТ. При переходе с Firebird 2.5 на PostgreSQL одной из первых становится необходимость переноса структуры базы данных. Ручной перенос сложных схем с множеством таблиц, индексов, процедур и функций — трудоёмкий и ошибко подверженный процесс. В этой статье я хочу поделиться инструментом, который берёт на себя большую часть рутинной работы.

О чём статья: Речь пойдёт о Python-скрипте, предназначенном для автоматизации миграции структуры базы данных с Firebird 2.5 на PostgreSQL. Он обрабатывает ключевые элементы схемы:

  • Домены (конвертируются в пользовательские типы DOMAIN).

  • Таблицы, включая столбцы, первичные ключи и ограничения NOT NULL.

  • Индексы (обычные и уникальные).

  • Внешние ключи.

  • Генераторы (становятся SEQUENCE).

  • Хранимые процедуры и функции (с конвертацией PSQL в plpgsql).

  • Представления (VIEW).

Как это работает: Скрипт использует библиотеки fdb и psycopg2 для подключения к исходной и целевой базам. Он анализирует системные таблицы Firebird (rdb$relations, rdb$fields, и т. д.), извлекает метаданные объектов и строит соответствующие SQL-выражения для PostgreSQL. Важной особенностью является учёт зависимостей между таблицами и программными объектами: скрипт использует топологическую сортировку, чтобы создавать объекты в правильном порядке (например, сначала таблицы, на которые ссылаются внешние ключи).

Примеры конвертации:

  • Типы данных: VARCHAR(N), INTEGER, TIMESTAMP и др. конвертируются напрямую.

  • NUMERIC(p, s) и DECIMAL(p, s) обрабатываются корректно.

  • Процедуры и функции: основные конструкции PSQL (SUSPEND, IIF, : для присваивания) заменяются на эквиваленты plpgsql (RETURN NEXT, CASE, :=).

  • Представления: базовые SQL-выражения адаптируются под синтаксис PostgreSQL.

Важные моменты:

  1. Только структура: Скрипт не переносит данные. Для этого подойдут специализированные ETL-инструменты или pgloader.

  2. Проверка обязательна: Конвертация сложного PSQL-кода не всегда бывает 100% точной. Сгенерированные процедуры и функции требуют ручной проверки.

  3. Нет триггеров: В текущей реализации миграция триггеров не поддерживается.

  4. Конфигурация: Данные для подключения к БД задаются в коде скрипта.

Где взять: Скрипт доступен в открытом репозитории на GitHub

Заключение: Этот инструмент значительно ускоряет процесс миграции схемы БД с Firebird на PostgreSQL, избавляя разработчика от рутинного переписывания DDL-выражений. Хотя автоматика не идеальна, она позволяет сэкономить время и сосредоточиться на тестировании и доработке результатов. Если вы столкнулись с подобной задачей — возможно, этот скрипт станет хорошей отправной точкой.

Комментарии (0)