- Зачем:
- генерация с нуля занимала часы, 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>
Демобаза 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 $$;