Преамбула: Миграция с устаревающих СУБД — частая задача в ИТ. При переходе с 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-выражений. Хотя автоматика не идеальна, она позволяет сэкономить время и сосредоточиться на тестировании и доработке результатов. Если вы столкнулись с подобной задачей — возможно, этот скрипт станет хорошей отправной точкой.
 
           
 
soroktu
А про "устаревающую" СУБД для чего написали? Мне бы даже более интересно было услышать, почему 2.5 не обновляли столько лет, она же в 2010 релизнулась. И почему не обновить fb сейчас до 5.0 вместо того, чтобы мигрировать на pg?