Доработки по генерации БД - в процессе

This commit is contained in:
2025-12-08 18:26:10 +03:00
parent 7f97654f0a
commit c95dab6478
6 changed files with 59 additions and 9 deletions
+14 -6
View File
@@ -1,5 +1,6 @@
-- Генерация ещё одного дня данных в демобазе bookings.
-- Если база пуста, берём стартовую дату из параметра :start_date (формат YYYY-MM-DD).
-- psql не умеет подставлять :start_date внутрь DO $$...$$, поэтому прокидываем дату через GUC.
SET bookings.start_date = :'start_date';
DO $$
DECLARE
v_max_book_date timestamptz;
@@ -15,8 +16,8 @@ BEGIN
SELECT max(book_date) INTO v_max_book_date FROM bookings.bookings;
IF v_max_book_date IS NULL THEN
-- База пустая: берём стартовую дату из psql-переменной
v_start_date := date_trunc('day', :'start_date'::timestamptz);
-- База пустая: берём стартовую дату из переданного параметра
v_start_date := date_trunc('day', current_setting('bookings.start_date')::timestamptz);
ELSE
-- Продолжаем с дня, следующего за максимальной датой
v_start_date := date_trunc('day', v_max_book_date) + interval '1 day';
@@ -26,9 +27,16 @@ BEGIN
-- Первая генерация вызывает generate(), последующие — continue()
IF v_max_book_date IS NULL THEN
CALL generate(v_start_date, v_end_date, 1);
CALL generate(v_start_date, v_end_date, :'jobs');
ELSE
CALL continue(v_end_date, 1);
CALL continue(v_end_date, :'jobs');
END IF;
END $$;
-- Ждём завершения фоновых джобов генератора, чтобы данные успели записаться
WHILE busy() LOOP
PERFORM pg_sleep(1);
END LOOP;
PERFORM dblink_disconnect(unnest(dblink_get_connections()));
END $$;
RESET bookings.start_date;