- Зачем: - исключить нестабильные режимы генератора, в которых bookings может перестать пополняться. - сделать причину ошибки понятной студенту сразу при запуске команд и SQL-скриптов. - Что: - добавлен precheck `bookings-check-jobs` в Makefile и подключён к `bookings-init` и `bookings-generate-day`. - добавлены явные проверки `bookings.jobs = 1` в `bookings/generate_next_day.sql` и `sql/src/bookings_generate_day_if_missing.sql`. - обновлена документация и `.env.example`: зафиксировано, что в стенде поддерживается только `BOOKINGS_JOBS=1`. - Проверка: - uv run make fmt. - uv run make test. - env BOOKINGS_JOBS=2 make bookings-init. - env BOOKINGS_JOBS=2 make bookings-generate-day. - make bookings-init. - make bookings-generate-day.
Демобаза bookings в Postgres
Этот каталог используется для работы с демобазой bookings, которая будет источником данных для будущего DWH в Greenplum.
На первом этапе мы:
- поднимаем отдельный контейнер
bookings-dbс Postgres; - устанавливаем в нём генератор демобазы
demodb(репозиторийpostgrespro/demodb); - генерируем данные «день за днём» с помощью
make‑команд.
Основные команды см. в корневом Makefile (bookings-init, bookings-generate-day, bookings-psql) и в README.md проекта.
Источник и версия
- Репозиторий демобазы:
postgrespro/demodb. - Закреплённый коммит:
d68de192850237719f09b47688d5f3fc94653ca6(см.DEMODB_COMMITв корневомMakefile).
Что мы патчим в demodb
install.sql:DROP DATABASE IF EXISTS demo WITH (FORCE)— установка не падает, даже если демобазу держат активные сессии (например, из Airflow).engine.sql: два изменения вengine_jobs1_sync.patch:busy()игнорирует свойpid, чтобы не считать собственное подключение занятым;continue()приjobs=1вызываетprocess_queueсинхронно (безdblink), иначе генерация обрывается при выходе изpsqlи данных не появляется.
- Режим эксплуатации в этом стенде: только
jobs=1(BOOKINGS_JOBS=1). - Патчи применяются автоматически в
make bookings-init. Если что-то пошло не так, их можно накатить вручную:patch -d bookings/demodb -p1 --forward < bookings/patches/install_drop_if_exists.patch patch -d bookings/demodb -p1 --forward < bookings/patches/engine_jobs1_sync.patch
Быстрая проверка после init/обновления
make bookings-initдолжен завершиться без ошибок; вbookings.bookingsожидаем >0 строк (примерно 15k).make bookings-generate-dayдобавляет следующий день послеmax(book_date).- Ручной вызов генерации из psql/DBeaver — только через DO-блок (подзапрос в аргументах
CALLне работает):DO $$ DECLARE v_next_day timestamptz; BEGIN SELECT date_trunc('day', max(book_date)) + interval '1 day' INTO v_next_day FROM bookings.bookings; CALL continue(v_next_day, 1); END $$;