Первичный ключ в партиционированной таблице
Вопрос
Таблица events партиционирована по диапазону created_at. Почему не получается создать PRIMARY KEY (id)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Партиционированные таблицы не поддерживают первичные ключи
- Нужно сначала создать все партиции, а потом объявлять ключ
- Уникальный ключ обязан включать ключ партиции:
(id, created_at)правильный ответ idдолжен иметь тип uuid, а не bigint, чтобы быть глобальным
Разбор
Уникальность в PostgreSQL обеспечивается индексом, а у партиционированной таблицы индексы локальные, по одному на партицию. Глобального индекса нет, поэтому база может гарантировать уникальность только если ключ партиционирования входит в ограничение: тогда одинаковый ключ не может оказаться в двух разных партициях. Отсюда PRIMARY KEY (id, created_at). Если нужна строгая уникальность одного id, её обеспечивают генератором (последовательность, UUIDv7) или отдельной таблицей. Порядок создания партиций и тип id тут ни при чём.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Удаление старых данных: DELETE или партиции
Следующий вопрос
Миграции схемы без простоя
Термины по теме
Ещё по теме «Проектирование и нормализация»
- Нарушение второй нормальной формы
- Транзитивная зависимость
- Денормализация
- Нормализация
- Суррогатный ключ
- Связь многие ко многим
- Тип для денег
- ON DELETE CASCADE