Что такое партицирование таблицы
Что проверяют
Работали ли вы с большими таблицами руками. Вопрос звучит просто, но за ним обычно идёт продолжение: как заводятся партиции на будущее, что станет с индексами и уникальностью и как это переживают миграции сервиса.
Как отвечать
Партицирование таблицы это разбиение её на части по значению ключа при сохранении одного имени для приложения. Вставка направляется в нужную часть автоматически, выборка с условием по ключу читает только подходящие.
CREATE TABLE events (
id bigint GENERATED ALWAYS AS IDENTITY,
user_id bigint NOT NULL,
created_at timestamptz NOT NULL,
payload jsonb
) PARTITION BY RANGE (created_at);
CREATE TABLE events_p01 PARTITION OF events
FOR VALUES FROM ('2026-01-01') TO ('2026-02-01');Дальше по существу: индекс объявляется на родительской таблице и повторяется в каждой части, уникальность возможна только вместе с ключом партицирования, отсоединение старой части стоит копейки по сравнению с удалением строк, а партиции на будущий период создаёт регламентное задание, а не первая неудачная вставка.
Для сервиса на Go важно, что код запроса не меняется: обращение идёт к общему имени таблицы, драйвер видит одну таблицу. Меняются миграции и обслуживание, а не слой доступа к данным.
Где спотыкаются
Ожидают, что раз таблица разбита, ускорится всё. Отсев работает только когда ключ присутствует в условии; выборка по идентификатору пользователя без ограничения по дате обойдёт все части сразу.
Не создают партиции заранее. Без части на новый период вставка отказывает или копится в партиции по умолчанию, а перенос строк оттуда потом требует блокировки и окна обслуживания.
Разбивают таблицу, которая проблемой не является. На десятках миллионов строк обычно достаточно правильного индекса, а партицирование добавляет обслуживание, ограничивает уникальность и осложняет внешние ключи.