сгенерирована bookings db
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
# Демобаза bookings в Postgres
|
||||
|
||||
Этот каталог используется для работы с демобазой [bookings](https://postgrespro.ru/education/demodb), которая будет источником данных для будущего DWH в Greenplum.
|
||||
|
||||
На первом этапе мы:
|
||||
- поднимаем отдельный контейнер `bookings-db` с Postgres;
|
||||
- устанавливаем в нём генератор демобазы `demodb` (репозиторий `postgrespro/demodb`);
|
||||
- генерируем данные «день за днём» с помощью `make`‑команд.
|
||||
|
||||
Основные команды см. в корневом `Makefile` (`bookings-init`, `bookings-generate-day`, `bookings-psql`) и в `README.md` проекта.
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
-- Генерация ещё одного дня данных в демобазе bookings.
|
||||
-- Если база пуста, берём стартовую дату из параметра :start_date (формат YYYY-MM-DD).
|
||||
DO $$
|
||||
DECLARE
|
||||
v_max_book_date timestamptz;
|
||||
v_start_date timestamptz;
|
||||
v_end_date timestamptz;
|
||||
BEGIN
|
||||
-- Проверяем, что демобаза установлена
|
||||
IF to_regclass('bookings.bookings') IS NULL THEN
|
||||
RAISE EXCEPTION 'Таблица bookings.bookings не найдена. Сначала выполните make bookings-init.';
|
||||
END IF;
|
||||
|
||||
-- Ищем последнюю сгенерированную дату
|
||||
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);
|
||||
ELSE
|
||||
-- Продолжаем с дня, следующего за максимальной датой
|
||||
v_start_date := date_trunc('day', v_max_book_date) + interval '1 day';
|
||||
END IF;
|
||||
|
||||
v_end_date := v_start_date + interval '1 day';
|
||||
|
||||
-- Первая генерация вызывает generate(), последующие — continue()
|
||||
IF v_max_book_date IS NULL THEN
|
||||
CALL generate(v_start_date, v_end_date, 1);
|
||||
ELSE
|
||||
CALL continue(v_end_date, 1);
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
Reference in New Issue
Block a user