Хочется поделиться опытом  преображения одного  представления кода в другой с помощью ETL процесса и графовой базы данных на актуальном в наши дни примере.  Вкратце есть база на mssql сервере есть хранимые процедуры. Есть база на postgres. Есть ETL процесс на Apache Air Flow. Запускаем  процесс, по окончании в базе postgres появляются процедуры и данные.  Скажу сразу данный подход не является полным автоматом, который перенесет любую  mssql  базу на postgres. Это попытка систематизировать подобный переход,  разбить его на управляемые небольшие части, которые типизируются и над которыми выполняются преобразования с возможностью контроля результата. Результатом же являются процедуры или функции на postgres.  В рамках ETL процесса для миграции процедур используется РДФ граф на базе Apache Jena Fuseki. Общий подход — вся информация о процедурах помещается в граф, классифицируется, добавляются связи между интересующими нас объектами. Затем начинается наращивание графа с помощью выполнения python модулей , с конечной целью построить “create procedure” команду, которая подается на исполнение в postgres на последнем этапе ETL процесса.  Для анализа и визуального контроля используется веб программа, где можно быстро добавлять отчеты и привязывать их к классификационному дереву графа с помощью кнопок. Без данной программы крайне тяжело ориентироваться в информации находящейся в графе.  Сами отчеты это “select” запросы выполняемые в контексте родительского объекта отображаемые в виде кнопки. Для редактирования классификационного дерева и добавления отчетов используется стандартный   инструмент для работы с РДФ графами Protege.    Два первых шага ETL процесса (“get_src_tables”, “load_src_data”) переносят данные — это стандартный pandas python модуль, перенос не идеален но он создает тестовый набор данных. Остальные шаги относятся к миграции процедур.  Основой переноса является данные из "information_schema" mssql server и планы исполнения хранимых процедур (“execution plan”). Шаг “get_proc_plan” используя сигнатуру процедур вызывает их на исполнение и сохраняет xml файл с планом. Затем это все экспортируется в граф для анализа и миграции.    Именно разбивка процедуры на части используемая в плане исполнения есть основа миграции. Части плана типизированы к примеру на изображении выше есть “Select”, “COND”   или “Update”. Т.е. теперь у нас не один большой текст процедуры, а небольшие куски, которые мы и будем анализировать и преобразовывать.    На уровне базы можно сделать инвентаризацию по типам планов исполнения.  Для создания postgres процедур берется тот же подход , каждой части mssql плана исполнения будет соответствовать postgres часть.    Принцип миграции заключается в следующем:   Берется конкретный тип к примеру “Select”, анализируется все случаи применения и выделяются типичные случаи. К примеру в используемой для примера базе я нашел для 4 типа преобразования для типа “select”.  Для каждого типа преобразования пишется обработчик на питоне c помощью модуля sqlparse, который внутри каждой процедуры для частей типа  “Select” будет пытаться выполнить соответствующее преобразование если этот случай будет найден.    Как упоминал в начале есть контроль исполнения каждого запуска ETL процесса с записью ошибок в тот же граф, где можно в целом отслеживать какие процедуры не создались и какие ошибки были при этом.    Обычно при разработке я меняю python модуль относящийся к преобразованию конкретного типа плана исполнения и запускаю последний шаг ETL процесса под названием “prepare_proc” и после его завершения проверяю отчеты об ошибках, сравниваю с предыдущими запусками.  В данной публикации я описал принцип работы рамочного процесса для переноса процедур с mssql на postgres. В целом он может быть взят за основу вашего переноса и основное чем предстоит заниматься это анализом ваших процедур с помощью веб программы, выявлением типичных случаев преобразования и дальнейшим написанием парсеров на python sqlparse. Ролик на ютубе (поставьте HD quality если нечеткая картинка) Код в git. dag Веб программа (Angular)   В дальнейших частях я планирую описать как это все инсталлировать, добавлять отчеты в веб программу и как писать собственные парсеры.    Благодарю за внимание.