Files
airflow-greenplum/bookings/README.md
T
ddadminandClaude Opus 4.6 78fb8e372c fix(bookings): исправлена генерация demodb и добавлен seed-дамп
- Зачем:
  - генерация с нуля занимала часы, boarding_passes были пустыми, данные
    пропадали после docker compose down/up.
- Что:
  - обновлён demodb до коммита 866e56f, добавлен патч install_connstr_no_hardcode.
  - BOOKINGS_INIT_DAYS увеличен до 60, BOOKINGS_JOBS по умолчанию 2.
  - добавлен seed-дамп bookings/seed/demo.sql.xz (42 MB, xz вместо 7z).
  - make bookings-init восстанавливает из дампа (~18 сек) и применяет GUC из .env.
  - make bookings-generate — генерация с нуля для разработчиков.
  - generate_next_day.sql: COMMIT после continue(), pg_sleep(3) для jobs>1, synchronous_commit=on + CHECKPOINT.
  - bookings-check-jobs: добавлена валидация нечисловых значений BOOKINGS_JOBS.
  - bookings-init теперь вызывает bookings-check-jobs как prerequisite.
  - синхронизированы внутренние документы (коммит demodb, init_days=60).
- Проверка:
  - make bookings-init && make bookings-generate-day BOOKINGS_JOBS=2.
  - make test.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 15:01:03 +03:00

3.8 KiB
Raw Blame History

Демобаза bookings в Postgres

Этот каталог используется для работы с демобазой bookings, которая будет источником данных для будущего DWH в Greenplum.

На первом этапе мы:

  • поднимаем отдельный контейнер bookings-db с Postgres;
  • инициализируем демобазу одним из двух способов (см. ниже);
  • генерируем данные «день за днём» с помощью make‑команд.

Два способа инициализации

Команда Что делает Время Для кого
make bookings-init Быстрое восстановление из seed-дампа ~18 сек Студенты (рекомендуется по умолчанию)
make bookings-generate Полная генерация с нуля через генератор demodb часы Разработчики, пересоздание дампа

Основные команды см. в корневом Makefile (bookings-init, bookings-generate, bookings-generate-day, bookings-psql) и в README.md проекта.

Источник и версия

  • Репозиторий демобазы: postgrespro/demodb.
  • Закреплённый коммит: 866e56f7 (см. 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 и данных не появляется.
  • install.sql: удалён хардкод gen.connstr без credentials (install_connstr_no_hardcode.patch).
  • Дефолт: BOOKINGS_JOBS=2. При jobs=1 генерация синхронная (без dblink), при jobs>1 — через dblink.
  • Патчи применяются автоматически в make bookings-generate (генерация с нуля). Если что-то пошло не так, их можно накатить вручную:
    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 (генерация с нуля) тоже должен дать >0 строк, но занимает значительно больше времени.
  • 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 $$;