Files
airflow-greenplum/bookings/README.md
T
ddadmin ffd9585ef4 fix(bookings): добавлено явное ограничение генератора на jobs=1
- Зачем:
  - исключить нестабильные режимы генератора, в которых 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.
2026-02-28 22:00:27 +03:00

2.9 KiB
Raw Blame History

Демобаза 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 $$;