Перейти к содержанию

Практикум: UUIDv7 как ключ партиционирования PostgreSQL

Этот вариант сохраняет PRIMARY KEY (id), поскольку таблица партиционирована непосредственно по id. Используются PostgreSQL 17 и pg-partsmith 1.8.0. Диапазоны за июль–октябрь 2026 года указаны явно, поэтому результат не зависит от даты запуска.

Нужны Docker и uv. Выполните команду из этого каталога:

uv run --no-project --python 3.13 --with-requirements requirements.txt python uuidv7_lab.py
Проверка Результат
Месячные границы UUIDv7 Соседние границы совпадают; нижняя граница сентября попадает в сентябрь
Августовский диапазон id План EXPLAIN в JSON читает одну партицию
Августовский диапазон created_at План читает все четыре партиции
Старые и будущие id вне подготовленных диапазонов Вставка отклоняется с SQLSTATE 23514
UUIDv4 с начальными байтами, попадающими в диапазон Распределение по диапазонам его принимает; отдельный CHECK версии UUID отклоняет
Сентябрьский UUIDv7 со значением created_at за 2020 год Строка попадает в сентябрь
Поздняя июльская строка после отсоединения июля Запись отклоняется: подходящей партиции нет

В uuid_flow.py находятся конфигурация и запрос из статьи. Функция sample_uuid7() написана для теста: она выставляет биты версии и варианта для заданных дат; это не рекомендация генератора id для продакшена. UUIDv7BoundaryCodec кодирует границы диапазонов, а не создаёт новые уникальные id событий.

Файл зависимостей и функции запуска БД и чтения планов находятся в соседнем практикуме миграции. При копировании примера сохраните оба каталога. Контейнер PostgreSQL удаляется при выходе. Июль отсоединяется явной командой для проверки поздних событий; автоматическое обслуживание разобрано в отдельной статье.

Исходный код практикума на GitHub.