Преамбула: Миграция с устаревающих СУБД — частая задача в ИТ. При переходе с 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.
Важные моменты:
Только структура: Скрипт не переносит данные. Для этого подойдут специализированные ETL-инструменты или
pgloader
.Проверка обязательна: Конвертация сложного PSQL-кода не всегда бывает 100% точной. Сгенерированные процедуры и функции требуют ручной проверки.
Нет триггеров: В текущей реализации миграция триггеров не поддерживается.
Конфигурация: Данные для подключения к БД задаются в коде скрипта.
Где взять: Скрипт доступен в открытом репозитории на GitHub
Заключение: Этот инструмент значительно ускоряет процесс миграции схемы БД с Firebird на PostgreSQL, избавляя разработчика от рутинного переписывания DDL-выражений. Хотя автоматика не идеальна, она позволяет сэкономить время и сосредоточиться на тестировании и доработке результатов. Если вы столкнулись с подобной задачей — возможно, этот скрипт станет хорошей отправной точкой.