Выбор ответа Senior Проектирование и нормализация обновлено

Первичный ключ в партиционированной таблице

Вопрос

Таблица events партиционирована по диапазону created_at. Почему не получается создать PRIMARY KEY (id)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Уникальный ключ обязан включать ключ партиции: (id, createdat). Уникальность в PostgreSQL обеспечивается индексом, а у партиционированной таблицы индексы локальные, по одному на партицию.

Варианты ответа

  1. Партиционированные таблицы не поддерживают первичные ключи
  2. Нужно сначала создать все партиции, а потом объявлять ключ
  3. Уникальный ключ обязан включать ключ партиции: (id, created_at)правильный ответ
  4. id должен иметь тип uuid, а не bigint, чтобы быть глобальным

Разбор

Уникальность в PostgreSQL обеспечивается индексом, а у партиционированной таблицы индексы локальные, по одному на партицию. Глобального индекса нет, поэтому база может гарантировать уникальность только если ключ партиционирования входит в ограничение: тогда одинаковый ключ не может оказаться в двух разных партициях. Отсюда PRIMARY KEY (id, created_at). Если нужна строгая уникальность одного id, её обеспечивают генератором (последовательность, UUIDv7) или отдельной таблицей. Порядок создания партиций и тип id тут ни при чём.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.