Как прочитать файл базы данных Progress.b1 в Python

Мне нужно экспортировать информацию из устаревшей системы баз данных. База данных представляет собой базу данных "Прогресс", и информация хранится в файле с расширением.b1.

Какой самый простой способ экспортировать все таблицы базы данных в текстовый файл?

1 ответ

Решение

Файл.b1 является частью базы данных Progress, но фактически не является самой базой данных. Содержит данные "before-image". Он используется для отслеживания транзакций, так что база данных может отменить в случае ошибки / отката и т. Д. Данные в этом файле действительно вам не помогут.

Что бы вы хотели, это файлы базы данных. Обычно называются.db, .d1, .d2, d3 и т. Д.

Однако чтение этих (двоичных) файлов будет очень сложным. Я даже не уверен, что есть какие-то спецификации на то, как они построены. Было бы намного проще использовать встроенные инструменты Progress для вывода всех данных в виде текстовых файлов. Эти текстовые файлы могут быть легко прочитаны некоторыми простыми программами на Python. Если у вас установлена ​​база данных в системе, вы найдете каталог с программами для обслуживания базы данных и т. Д. Там вы также найдете несколько утилит.

В зависимости от версии ОС и Progress это может выглядеть несколько иначе. Вы хотели бы войти в утилиту администрирования данных и перейти в Admin => Dump Data and Definitions.

Скриншот администрирования данных о прогрессе

Если вы посмотрите на итоговые файлы.df для определений данных (схема) и.d для самих данных, вы сможете понять, как они отформатированы. Отношения вообще не хранятся в базе данных. В среде Progress они в основном существуют только в приложении, обращающемся к БД.

Вы также можете выбрать Экспорт данных для различных форматов ("Текст", вероятно, наиболее интересен).

Если вы можете получить программный доступ к среде Progress, может быть даже проще написать небольшую программу, которая экспортирует отдельные таблицы. Это создаст файл с разделителями точкой с запятой для "table1":

OUTPUT TO C:\temp\table1.txt.
FOR EACH table1 NO-LOCK:
  EXPORT DELIMITER ";" table1.
END.
OUTPUT CLOSE.
Другие вопросы по тегам