Пример интеграции РЕД Базы Данных c schemacrawler
Для компаний, которые используют СУБД типа РЕД База Данных или FireBird, требуется “легкий“ инструмент, который просто использовать, поддерживает автоматизированные проверки, можно применять на разных платформах, желательно бесплатный и с открытым исходным кодом. И чтобы он поддерживал работу с Firebird/РЕД База Данных.
В качестве одной из возможных альтернатив такого инструмента был предложен SchemaCrawler.
Зачем и когда?
В практике инженеров данных, разработчиков и администраторов баз данных часто возникает потребность "заглянуть внутрь" структуры таблиц реляционной БД. Документация на существующую давно и интенсивно используемую в какой-либо компании базу данных нередко бывает не просто неполной, а устаревшей или отражающей лишь чье-то представление о ней. А база данных – это важнейшая часть корпоративных систем, она живет и изменяется вместе с компанией, и должна развиваться по мере расширения поля и объема деятельности компании. Для этого разработчики должны четко представлять, какие данные есть у компании, где и в каком виде они хранятся, какие способы и режимы доступа к ним существуют, какие правила и инструменты обеспечивают целостность информации.
Имеется несколько важных случаев, когда требуется получить весь набор информации о структуре таблиц и полей какой-то базы данных. Например:
- В компании появляется новая АИС, разработанная в другой компании, с ее собственным хранилищем данных. Требуется выполнить интеграцию этой системы с имеющимися у компании данными.
- Требуется расширить имеющуюся базу данных для поддержки новых функций расширяющегося бизнеса компании
- При переносе данных на новый сервер или новый тип СУБД, определить, не произошло ли каких-то спонтанных изменений в структуре БД
- Проверить, не было ли внесено скрытых или незаконных изменений (проверка соответствия эталону)
- и многие другие.
SchemaCrawler
SchemaCrawler (github) — это бесплатный инструмент для выделения, исследования и понимания схем баз данных. SchemaCrawler имеет хороший набор полезных функций для управления данными. Можно искать объекты схемы базы данных с помощью регулярных выражений и выводить схему и данные в удобном для чтения текстовом формате. Результат используется для документации базы данных, а также для сравнения с другими схемами баз данных. SchemaCrawler также выдает графические диаграммы схем. Кроме того, для базы данных можно выполнять скрипты на любом стандартном языке сценариев. С помощью lint легко найти потенциальные проблемы проектирования схемы.
SchemaCrawler поддерживает практически любую СУБД, для которой имеется драйвер JDBC, но для удобства поставляется в комплекте с драйверами для некоторых часто используемых реляционных СУБД. SchemaCrawler работает с любой операционной системой, которая поддерживает Java SE 8 или выше.
В этом материале описан пример того, как можно использовать этот инструмент для документирования баз данных СУБД РЕД База Данных.
Установка
Возможные способы получения, установки и применения инструмента описаны на сайте. Есть несколько вариантов установки инструмента локально, использования его как библиотеки, запуска в контейнере Docker. Для изучения параметров командной строки имеется онлайн-руководство с примерами.
Можно установить и использовать Cli-приложение SchemaCrawler или SchemaCrawler Interactive Shell.
Установка в Windows
На странице GitHub по ссылке на сайте готовых сборок не оказалось. Пришлось воспользоваться рекомендованным установщиком командной строки Scoop. Для работы SchemaCrawler требуется среда выполнения Java. Поэтому необходимо выполнить следующие действия:
- Установить среду выполнения Java (уже была установлена)
- Установить установщик командной строки Scoop.
- Выполнить в командной строке PowerShell:
scoop install schemacrawler - Можно запускать schemacrawler из командной строки
schemacrawler --help
В качестве альтернативы – аналогичные действия можно выполнить для Microsoft Windows Package Manager, winget.
Установка в Linux
Здесь тоже все непросто: кроссплатформенная установка выполняется с помощью SDKMan
- Установить SDKMan
- Установить среду выполнения Java (например, с помощью того же SDKMan)
- Выполнить
sdk install schemacrawler - Запустить инструмент
schemacrawler.sh, который потребует выполнить сначалаsource ~/.sdkman/bin/sdkman-init.sh
Скорее всего, потребуется выполнить еще ряд дополнительных настроек переменных среды вашего Linux, чтобы все это работало в следующий раз. Поэтому используем контейнеры Docker
Установка и запуск через Docker
Можно использовать официальный образ SchemaCrawler Docker из Docker Hub, чтобы сократить некоторые шаги установки. Он поставляется с предустановленным Graphviz, и позволяет сразу генерировать диаграммы схем. Официальный образ с контейнером schemacrawler можно найти на dockerhub и установить:
mkdir ~/sc
cd ~/sc
docker pull schemacrawler/schemacrawler
или просто запустить его командой в терминале (скачается автоматически):
docker run \
-v $(pwd):/home/schcrwlr/share \
--name schemacrawler \
--rm -i -t \
--entrypoint=/bin/bash \
schemacrawler/schemacrawler
Docker-контейнер SchemaCrawler запускается с непривилегированным пользователем schcrwlr в группе users. Следует убедиться, что точка монтирования для контейнера SchemaCrawler доступна для записи пользователю 1000 в группе 100 на хосте.
После загрузки и запуска контейнера указанной командой можно запустить schemacrawler Interactive Shell
schemacrawler --shell
или запускать выполнение из командной строки
schemacrawler \
--server=sqlite --database=sc.db \
--info-level=maximum --command=schema
Однако, в установленном ПО пока отсутствует возможность соединения с РЕД База Данных или Firebird.
Добавление драйверов РЕД База Данных и InterBase
“Из коробки” schemacrawler имеет плагины для поддержки следующих СУБД:
- SQLite Xerial SQLite JDBC driver
- Oracle JDBC driver
- Microsoft SQL Server JDBC driver
- IBM DB2 JDBC driver
- MySQL Connector/J JDBC driver
- PostgreSQL JDBC driver
- Trino JDBC driver
- Cassandra JDBC driver
Для этих СУБД следует применять параметры соединения такие, как:
--server- указывает тип СУБД. Допустимы только:sqlite,oracle,sqlserver,db2,mysql,postgresql,offline--database--host-–port
В этом списке отсутствуют Firebird и РЕД База данных. Однако, получить доступ к БД любой СУБД, для которой существует совместимый JDBC драйвер, несложно. Нужно поместить файлы драйвера и необходимых библиотек в подкаталог lib каталога, куда был установлен SchemaCrawler.
Соединение с такими БД должно выполняться через использование параметра --url, например, для MS SQL Server:
url=jdbc:sqlserver://db.example.com:1433;databaseName=master;encrypt=false
Firebird и РЕД База Данных поставляются с JDBC драйвером jaybird. Необходимые библиотеки можно найти, например, в дистрибутиве РБД Эксперт.
Кстати!
JDBC драйвер для родственной СУБД InterBase называется
interclient.jarи не требует дополнительных библиотекLinux
Установка JDBC драйвера в Linux выполняется, как написано в документации:

Windows
Scoop или Winget поместили JDBC драйверы в подкаталог App, хотя есть и lib, что несколько путает. Чтобы связь с Fiebird и РЕД База Данных заработала, драйвера jaybird и interclient были также скопированы в App.

Docker
В готовом Docker-образе каталоги и драйвера скрыты от пользователей. Лучше всего собрать новый дополненный образ. Для этого в рабочем каталоге раскрываем архив дистрибутива и создаем такой Dockerfile
# ========================================================================
# SchemaCrawler
# http://www.schemacrawler.com
# Copyright (c) 2000-2025, Sualeh Fatehi <sualeh@hotmail.com>.
# All rights reserved.
# ------------------------------------------------------------------------
#
# SchemaCrawler is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# SchemaCrawler and the accompanying materials are made available under
# the terms of the Eclipse Public License v1.0, GNU General Public License
# v3 or GNU Lesser General Public License v3.
#
# You may elect to redistribute this code under any of these licenses.
#
# The Eclipse Public License is available at:
# http://www.eclipse.org/legal/epl-v10.html
#
# The GNU General Public License v3 and the GNU Lesser General Public
# License v3 are available at:
# http://www.gnu.org/licenses/
#
# ========================================================================
FROM eclipse-temurin:21-jdk-alpine
LABEL \
"maintainer"="Sualeh Fatehi <sualeh@hotmail.com>" \
"org.opencontainers.image.authors"="Sualeh Fatehi <sualeh@hotmail.com>" \
"org.opencontainers.image.title"="SchemaCrawler" \
"org.opencontainers.image.description"="Free database schema discovery and comprehension tool" \
"org.opencontainers.image.url"="https://www.schemacrawler.com/" \
"org.opencontainers.image.source"="https://github.com/schemacrawler/SchemaCrawler" \
"org.opencontainers.image.vendor"="SchemaCrawler" \
"org.opencontainers.image.license"="(GPL-3.0 OR OR LGPL-3.0+ EPL-1.0)"
# Install Graphviz as root user
RUN \
apk add --update --no-cache \
bash \
bash-completion \
graphviz \
ttf-freefont
# Copy SchemaCrawler distribution from the build directory
COPY \
. /opt/schemacrawler/
# Ensure that the SchemaCrawler script is executable
RUN \
chmod +rx /opt/schemacrawler/bin/schemacrawler.sh
# Run the image as a non-root user, "schcrwlr"
RUN \
adduser -u 1000 -S schcrwlr -G users
USER schcrwlr
WORKDIR /home/schcrwlr
# Copy configuration and example files with rw-rw-r-- for the current user
COPY \
--chown=schcrwlr:users \
./config/* \
./sc.db \
./*.py \
/home/schcrwlr/
# Create .bashrc with aliases for SchemaCrawler
RUN \
echo 'alias schemacrawler="/opt/schemacrawler/bin/schemacrawler.sh"' \
>> /home/schcrwlr/.profile \
&& echo 'export schemacrawler' \
>> /home/schcrwlr/.profile \
&& cp /home/schcrwlr/.profile /home/schcrwlr/.bashrc \
&& echo 'PS1="\[\e[0;33m\]SchemaCrawler\[\e[m\]:\w\$ "' >> ~/.bashrc \
&& echo 'echo "`schemacrawler --version`"' >> ~/.bashrc \
&& echo 'echo -e "\n\nUse the schemacrawler command.\n"' >> ~/.bashrc
CMD ["bash"]

Jar копируется в каталог lib. Скрипты на Питоне и БД sc.db (SQLite) потребуются позже для проверки возможностей программы.
После этого надо выполнить команду сборки нового образа
docker buildx build -t scrw .
Собранный (без ошибок) образ scrw готов к запуску

Для проверки выполнено обращение к БД medecine.fdb, которая расположена на сервере REDBASE (192.168.1.74)

Обращение к СУБД РЕД База Данных было успешным.
Запуск и проверка
Самый простой способ проверить правильность установки и работоспособность программы SchemaCrawler – вызвать ее встроенную справку:

Так можно получить список всех команд и их параметров. Справка длинная, имеет смысл вызывать ее для отдельной команды или в режиме постраничного просмотра.
Команда для проверки наличия доступа к РЕД База Данных (на сервере с IP адресом 192.168.1.74) выглядит так:
schemacrawler --url=jdbc:firebirdsql://192.168.1.74:3050/C:/_Data/marketplace.fdb \
--user=sysdba --password=masterkey \
--info-level=maximum --command=schema
Аналогично для InterBase:
schemacrawler --url=jdbc:interbase://localhost/C:/Data/EMPLOYEE.GDB \
--user=sysdba --password=masterkey \
--info-level=standard --command=schema
Далее будут описаны базовые функции программы и команды для их использования.# Базовые режимы документирования БД
Первое, что можно попробовать, — это примеры SchemaCrawler. Затем изучить командную строку SchemaCrawler с помощью онлайн-руководства. Это учебное пособие работает в любом браузере без необходимости в дополнительном программном обеспечении или плагинах (SchemaCrawler - How-to ). Также SchemaCrawler предоставляет подробную справку по командной строке. Например:
schemacrawler -h commands
Для целей документирования и визуализации схемы БД важнейшими являются:
- brief — показывает основную информацию о схеме для таблиц, представлений и процедур, столбцов, первичных ключей и внешних ключей
- count — показывает количество строк в таблицах,
- details — показывает максимально возможную детализацию схемы, включая привилегии и сведения о привилегиях, триггерах и ограничениях проверки,
- dump — показывает данные из всех строк в таблицах,
- lint — показывает lints (несоблюдение стандартов и соглашений по кодированию) в схеме базы данных
- schema — показывает часто необходимые сведения о схеме, включая подробности о таблицах, представлениях и процедурах, столбцах, первичных ключах, индексах, внешних ключах и триггерах
- script — выполняет файл сценария, например JavaScript, для обработки схемы базы данных
Например:
Здесь параметр --url обеспечивает соединение с базой данных СУБД Ред БазаДанных на сервере с указанным IP. Параметры --user и --password задают имя пользователя БД и его пароль входа. Указывать пароль в командной строке категорически неправильно. Тогда можно воспользоваться заданием переменной окружения со значением пароля и подставлять ее значение при запуске, как сделано в примере ниже:

Важный параметр --info-level задает степень подробности выделяемой информации.
Команда List выдает более компактный список:

а команда count — количество записей в каждой таблице

С помощью команды dump легко получить содержимое – все записи таблиц,

но с помощью дополнительного параметра --tables=COUNTRY ограничить набор таблиц для дампа:

SchemaCrawler — один из немногих среди инструментов для создания диаграмм баз данных, для работы с которым не обязательно знать имена интересующих таблиц или столбцов. Все, что нужно знать, это то, что искать, в форме регулярного выражения. При вызове можно отфильтровывать таблицы, представления и столбцы на основе регулярных выражений, используя функциональность grep.


А это вариант, допускающий регистронезависимый (case insensitive) поиск.
schemacrawler --url=jdbc:firebirdsql://192.168.1.74:3050/C:/_Data/employee.fdb \
--user=sysdba --password:env=ISC_PASSWORD \
--info-level=standard --no-info \
--grep-columns="(?i).*pho.*" \
--command=list
Параметры --parents и --children позволяют задавать глубину связей рассматриваемых таблиц для документирования и построения диаграмм.
Вывод в разных форматах
Для выдачи отчета может быть назначен один из нескольких форматов выдачи. Для разных команд доступны разные наборы форматов. Lint и некоторые другие могут выдать отчет в JSON, YAML, TXT и т.п. Для command=schema доступны только TXT и HTML.
schemacrawler --url=jdbc:firebirdsql://192.168.1.74:3050/C:/_Data/employee.fdb \
--user=sysdba --password:env=ISC_PASSWORD \
--info-level=standard --no-info \
--parents=1 --children=2 \
--command=schema \
--output-format=html --output-file=/home/schcrwlr/share/idx.html

Чаще всего параметры --output-format и
--output-file используются для выдачи графических диаграмм схем БД

Построение диаграмм
SchemaCrawler имеет мощные параметры командной строки для сопоставления таблиц, а затем поиска других таблиц, связанных с сопоставленными, будь то родительские или дочерние таблицы. Когда схема изменится, диаграмму можно просто пересоздать, не зная точных изменений, которые были внесены в схему.
SchemaCrawler использует Graphviz для генерации диаграмм и генерирует диаграммы баз данных в любом из форматов вывода, которые он поддерживает. Graphviz необходимо установить. Инструкции предоставляются вместе с загрузкой SchemaCrawler, в примере диаграммы. В настоящее время чистая Java-библиотека Graphviz способна генерировать только диаграммы PNG и SVG.
Для построения диаграмм необходимо использовать правильные параметры командной строки, например:
--command=schema
--output-format=png
--output-file=graph.png
Рекомендуется показывать только существенные поля и связи.
--info-level=standard --command=brief
Чтобы задать заголовок диаграммы, следует использовать параметр
--title "Демонстрационная БД Employee"
Индексы отображаются при использовании параметра --command=details.
Большинство других опций можно задать в конфигурационном файле schemacrawler.config.properties
Вывод в изображение
Диаграмму схемы БД в формате PNG можно получить командой
schemacrawler --url=jdbc:firebirdsql://192.168.1.74:3050/C:/_Data/employee.fdb \
--user=sysdba --password:env=ISC_PASSWORD \
--info-level=standard --no-info \
--command=schema \
--output-format=PNG --output-file=/home/schcrwlr/share/idx.png
Диаграмма схемы другой БД — Medecine — в формате SVG была получена командой:
schemacrawler --url=jdbc:firebirdsql://192.168.1.74:3050/C:/_Data/medecine.fdb \
--user=sysdba --password:env=ISC_PASSWORD \
--info-level=standard --no-info \
--command=details \
--output-format=SVG --output-file=/home/schcrwlr/share/med.svg
Скрипты для популярных сайтов (Mermaid, PlantUML, dbdiagram.io)
В стандартную поставку входят скрипты для генерации диаграмм схем данных на популярных сайтах.
Mermaid Entity Relationship Diagrams
- Получить текстовый файл диаграммы в формате Mermaid. Это можно сделать, например, запустив Docker контейнер с командой:
docker run \ --mount type=bind,source="$(pwd)",target=/home/schcrwlr/share \ --rm -it \ scrw \ /opt/schemacrawler/bin/schemacrawler.sh \ --url=jdbc:firebirdsql://192.168.1.74:3050/c:/_data/employee.fdb \ --user=sysdba --password=masterkey \ --info-level standard --command script \ --script-language python --script mermaid.py \ --output-file share/employee.mmd
2. Содержимое полученного файла employee.mmd скопировать в соответствующее поле на сайте [mermaid.live](https://mermaid.live/), а результат — сохранить в желаемом формате.

#### Диаграммы PlantUML | [PlantUML Diagrams](https://www.planttext.com/)
На сайте PlantUML диаграмма создается аналогичным образом.
```shell
docker run \
--mount type=bind,source="$(pwd)",target=/home/schcrwlr/share \
--rm -it \
scrw \
/opt/schemacrawler/bin/schemacrawler.sh \
--url=jdbc:firebirdsql://192.168.1.74:3050/c:/_data/employee.fdb \
--user=sysdba --password=masterkey \
--info-level standard --command script \
--script-language python --script plantuml.py \
--output-file share/employee.puml
Содержимое полученного файла employee.puml копируется в соответствующее поле на сайте PlantUML. Остается только экспортировать результат.
dbdiagrams.io | Диаграммы dbdiagram.io
Для этого примера был использован уже запущенный контейнер.
schemacrawler --url=jdbc:firebirdsql://192.168.1.74:3050/C:/_Data/employee.fdb \
--user=sysdba --password:env=ISC_PASSWORD \
--info-level standard --command script \
--script-language python --script dbml.py \
--output-file share/employee.dbml
В остальном технология не отличается от предыдущих примеров, с точностью до URL сайта.
Дата последнего изменения: 07.11.2026
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.