@KBBS

Какой будет более правильный вариант при секционировании таблиц?

Какой будет правильный подход при секционировании таблиц в PostgreSQL?
Добрый день.

Чисто для примера:
CREATE TABLE "users" (
"id" BIGSERIAL NOT NULL PRIMARY KEY,
"name" VARCHAR(50) NOT NULL,
"phone" VARCHAR(15) NOT NULL,
"created_at" TIMESTAMPTZ(6) NOT NULL
) PARTITION BY HASH ("created_at");

ОШИБКА:  ограничение уникальности в секционированной таблице должно включать все секционирующие столбцы
ПОДРОБНОСТИ:  В ограничении PRIMARY KEY таблицы "users" не хватает столбца "created_at", входящего в ключ секционирования.

Как лучше поступать в этом случае?
Делать составной PRIMARY KEY? Но не снизит ли это его эффективность?
Или же обойтись обычным индексом по столбцу id?

Спасибо.
  • Вопрос задан
  • 152 просмотра
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Можно объявить PK индивидуально на каждой партиции. Глобально-уникального индекса всё равно нет.
Составной PK включающий ключ партицирования логичным образом изменит своё поведение.

PS: в чём вы предполагаете смысл от BY HASH ("created_at")?
PPS: под пользователями понимаются не люди? Просто людей на Земле маловато чтобы имело смысл делать партицирование по пользователям.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AshBlade
@AshBlade
Просто хочу быть счастливым
Тут 2 решения:
- Ключ партиционирования - "id"
- Использовать партиционирование по диапазону - BY RANGE ("created_at").
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы