Уход от запуска DAG за конкретную дату.

Теперь новый запуск генерирует и переливает новый, следующий день
This commit is contained in:
2025-12-10 21:53:17 +03:00
parent 7a9b2d182e
commit 29490828f4
9 changed files with 80 additions and 62 deletions
+8 -17
View File
@@ -1,10 +1,11 @@
-- Генерация учебного дня в демо-БД bookings.
-- Если данные за указанный день уже существуют, генерация не выполняется.
-- Этот скрипт всегда добавляет следующий учебный день после максимальной даты
-- в таблице bookings.bookings (или несколько дней от стартовой даты, если база пуста).
-- Логическая дата запуска DAG ({{ ds }}) здесь не используется для выбора дня —
-- она служит только меткой батча и попадает в логи/стейдж.
DO $$
DECLARE
v_has_day boolean;
v_load_date date := {{ params.load_date }}::date;
v_max_book_date timestamptz;
v_start_date timestamptz;
v_end_date timestamptz;
@@ -17,19 +18,6 @@ BEGIN
RAISE EXCEPTION 'Таблица bookings.bookings не найдена. Сначала выполните make bookings-init.';
END IF;
-- Проверяем, есть ли уже данные за нужный день
SELECT EXISTS (
SELECT 1
FROM bookings.bookings
WHERE book_date::date = v_load_date
)
INTO v_has_day;
IF v_has_day THEN
RAISE NOTICE 'Данные за % уже есть в bookings.bookings — генерация не требуется.', v_load_date;
RETURN;
END IF;
-- Ищем последнюю сгенерированную дату
SELECT max(book_date) INTO v_max_book_date FROM bookings.bookings;
@@ -50,10 +38,13 @@ BEGIN
CALL continue(v_end_date, v_jobs);
END IF;
RAISE NOTICE 'Сгенерированы данные в bookings.bookings за интервал [% - %).',
date_trunc('day', v_start_date),
date_trunc('day', v_end_date);
-- Ждём завершения фоновых джобов генератора, чтобы данные успели записаться
WHILE busy() LOOP
PERFORM pg_sleep(1);
END LOOP;
PERFORM dblink_disconnect(unnest(dblink_get_connections()));
END $$;