top of page

DBLiner — фреймворк оркестрации данных для PostgreSQL и GreenPlum

DBLiner — это лёгкая, полностью автоматизированная система управления процессами загрузки данных и построения витрин, построенная на PL/pgSQL. Она не реализует логику извлечения, трансформации или агрегации — вместо этого она предоставляет надёжную обёртку для запуска, мониторинга и управления пользовательскими ETL-задачами внутри базы данных.

Проект создан для команд, которые хотят централизованно управлять множеством разнородных процессов (загрузка из внешних источников через dblink, очистка, расчёт витрин) без привязки к внешним планировщикам или сложным фреймворкам. Всё управление сосредоточено в СУБД, а разработчики пишут только бизнес-логику в виде хранимых функций — остальное берёт на себя DBLiner.

Ключевые возможности

  • Оркестрация задач — система позволяет регистрировать произвольные пользовательские функции (на PL/pgSQL или даже на любом языке, поддерживаемом PostgreSQL) как задачи с указанием зависимостей, частоты запуска и приоритета.

  • Гибкое расписание — встроенный планировщик (на основе pg_cron или собственного демона, запускающего dbliner.run_scheduler()) активирует задачи по времени, по событию (триггер) или по завершению других задач.

  • Конвейеры (pipelines) — возможность объединять задачи в цепочки с автоматическим контролем порядка выполнения. Например: «загрузить сырые данные → запустить очистку → перестроить витрину».

  • Журналирование и алертинг — каждая попытка выполнения фиксируется в таблицах с деталями (время старта/финиша, статус, объём обработанных строк, текст ошибки). При сбое система может отправлять уведомления (email, Telegram).

  • Повторы и обработка ошибок — настраиваемые политики повторных попыток при временных сбоях (например, разрыв dblink-соединения).

  • Интерфейс для администратора — набор представлений и функций для просмотра статуса задач, ручного запуска/остановки, пересмотра расписания без изменения кода.

Архитектура

Все компоненты DBLiner размещаются в отдельной схеме dbliner. Основные объекты:

  • Справочник задач (tasks) — хранит имя пользовательской функции, её параметры, расписание (cron-выражение или триггерное событие), зависимости, политику повторов.

  • Диспетчер (run_task()) — процедура, которая динамически вызывает целевую функцию, передавая ей параметры из контекста задачи, и фиксирует результат в журнале.

  • Планировщик (run_scheduler()) — обходит задачи, определяет готовые к запуску (по времени или по зависимостям) и ставит их в очередь, учитывая приоритеты и лимиты параллелизма.

  • Журнал выполнения (*_log) — содержит историю всех запусков, включая трассировку ошибок и метаданные.

  • Системные представления — для мониторинга активных задач, задержек, ошибок и производительности.

Пользователи создают свои функции в любых схемах и регистрируют их в DBLiner через простой API (dbliner.register_task()). Система не требует перезагрузки — новые задачи подхватываются автоматически при следующем цикле планировщика.

Преимущества

  • Разделение ответственности — разработчики пишут только бизнес-логику, а DBLiner отвечает за надёжный запуск, повтор, логирование и мониторинг.

  • Минимализм — не нужно изучать сложные DSL или устанавливать внешние инструменты (Airflow, Jenkins, etc.). Достаточно знакомого PL/pgSQL.

  • Прозрачность — весь код на SQL, легко аудировать, модифицировать и тестировать по частям.

  • Гибкость — можно комбинировать задачи разного типа: загрузка через dblink, расчёт витрин.

  • Масштабируемость — поддерживает как одиночный PostgreSQL, так и распределённый GreenPlum. В кластере планировщик может выполняться на мастере, а задачи — на сегментах (при правильной разработке функций).

Для кого создан DBLiner

  • Разработчики хранилищ данных, которые хотят быстро настраивать регулярные загрузки без написания костылей из bash-скриптов и crontab.

  • Администраторы БД, стремящиеся централизовать управление фоновыми процессами и упростить отладку.

  • Аналитики, которым нужен прозрачный контроль над последовательностью расчёта витрин.

  • DevOps/SRE, кто ищет замену тяжёлым оркестраторам в микросервисной архитектуре.

Требования и установка

  • PostgreSQL 9+ или GreenPlum 6+ (с поддержкой PL/pgSQL и dblink).

  • Рекомендуется расширение pg_cron для встроенного расписания (если недоступно — можно запускать dbliner.run_scheduler() из внешнего cron).

  • Установка: выполнить install.sql, который создаёт схему dbliner, все таблицы, функции и начальные данные (например, предустановленные задачи для тестирования).

  • Для регистрации своей задачи достаточно вызвать SELECT dbliner.register_task(...) и указать имя функции, расписание и зависимости.

Лицензия и экосистема

Проект распространяется под MIT License — свободно для коммерческого использования. Код открыт на GitHub, принимаются предложения по улучшению. 

bottom of page