Есть две БД PostgreSQL и FireBird. Нужно синхронизировать одну таблицу между ними.
Частичная реализация готова ее нужно только подпилить. Таблицы и там и там одинаковые. За исключением одного поля (FIREID и POSTID).
Схематично выглядит так:
|request_id| |SHAPE| |FL_READY| |FIREID| <===> |request_id| |SHAPE| |FL_READY| |POSTID|
Задача:
1. Взять из PostgreSQL все данные с FL_READY=10
2. Выгрузить их в FireBird
3. Поменять флаг в PostgreSQL на FL_READY=10 (данные ожидают синхронизации)
Важный момент. SHAPE — бинарное поле. У меня напрямую выгрузить его из одной БД в другую не получилось. Там реально какой-то гемор.
Скорость работы приложения вообще не важна. Предполагается сделать сделать так.
Данные обрабатываются построчно. Т.е. делаем одну выборку. Сохраняем текстовые данные в другую БД. Блоб на ФС и потом далаем UPDATE в целевой базе (вставляем его).
Потом удлаляем блоб с файловой системы.
Делаем такую же операцию с другой строкой и тд.
Важный момент 2. Поле request_id из PostgreSQL должно будет стать полем POSTID в FireBird. Это нужно чтобы понять что к чему относится. Типа связывание.
=============================
Сейчас порядок операций раелизован так.
SyncRequest(postconn, fireconn, 'POSTID', 'FIREID')
Меня этот вариант устраивает полностью.
Обратный порядок может быть сделан путем указания в начале 'FIREID' и потом 'POSTID'
Далее должна быть возможность использовать данную процедуру задом наперед. С рядом упрощений.
Если у нас туперь у FireBird появился флаг 20, то берем можно по ИД или гуиду обратиться к PostgreSQL и обновить у него на FL_READY=12.
А в самом FireBird поменять флаг на 21.
Собственно все.
Желательно оформить все в виде двух функций с комментариями. За основу лучше взять текущую реализацию.
Важно чтобы код был простой и линейный — мне нужно чтобы я сам легко его мог поправить. Поэтому никаких классов. Пароли тоже можно захардкодить.
Тупо функции которые работают последовательно.
В настоящий момент в коде используется одна единственная функция:
SyncRequest
Текущая реализация не работает с бинарными блобами. На выходе нужно 2-3 или сколько там у вас функций получится.
Для работы с FireBird лучше использовать менеджер FlameRobin. БД реально очень простая.
Вот сами дампы БД:
expirebox.com/download/c1... Вот имеющийся код:
www.everfall.com/paste/id... Там в моем коде есть еще фрагмент по работе с prod_type_id. Сейчас вообще не могу вспомнить что оно делало.
Вроде бы все развернуто максимально написал.
Вот если что как оно с БД работает:
stackoverflow.com/questio...