Преамбула: Миграция с устаревающих СУБД — частая задача в ИТ. При переходе с 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: https://github.com/VohminV/FB2.5-to-PostgreSQL
Заключение: Этот инструмент значительно ускоряет процесс миграции схемы БД с Firebird на PostgreSQL, избавляя разработчика от рутинного переписывания DDL-выражений. Хотя автоматика не идеальна, она позволяет сэкономить время и сосредоточиться на тестировании и доработке результатов. Если вы столкнулись с подобной задачей — возможно, этот скрипт станет хорошей отправной точкой.
ссылка на оригинал статьи https://habr.com/ru/articles/930636/
Добавить комментарий