Table partitioning
Goal
Справочник секционирования таблиц: RANGE, LIST, управление партициями и runtime-поведение.
PARTITION BY RANGE
CREATE TABLE events (
id INTEGER PRIMARY KEY,
ts DATE NOT NULL,
data TEXT
) PARTITION BY RANGE (ts);
Range partitions
CREATE TABLE events_2025 PARTITION OF events
FOR VALUES FROM ('2025-01-01') TO ('2026-01-01');
CREATE TABLE events_2026 PARTITION OF events
FOR VALUES FROM ('2026-01-01') TO ('2027-01-01');
PARTITION BY LIST
CREATE TABLE metrics (
id INTEGER PRIMARY KEY,
region VARCHAR(20) NOT NULL,
value BIGINT
) PARTITION BY LIST (region);
List partitions
CREATE TABLE metrics_eu PARTITION OF metrics
FOR VALUES IN ('eu-west', 'eu-east');
CREATE TABLE metrics_us PARTITION OF metrics
FOR VALUES IN ('us-east', 'us-west');
DEFAULT partition
CREATE TABLE events_other PARTITION OF events DEFAULT;
Строки, не подпадающие ни под одну партицию, попадают в DEFAULT.
Если DEFAULT не существует и подходящая партиция не найдена — 23514 check_violation.
ALTER TABLE — attach / detach
ALTER TABLE events ATTACH PARTITION events_2027
FOR VALUES FROM ('2027-01-01') TO ('2028-01-01');
ALTER TABLE events DETACH PARTITION events_2025;
DROP PARTITION
DROP PARTITION events_2025;
Runtime behavior
INSERT routing
INSERT в родительскую таблицу автоматически маршрутизирует строку в подходящую дочернюю партицию:
INSERT INTO events (id, ts, data) VALUES (1, '2026-06-15', 'test');
-- → events_2026
Если ни одна партиция не подходит и DEFAULT отсутствует:
ERROR: 23514: new row for relation "events" violates check constraint
Append-only inheritance
Если родительская таблица объявлена как append_only = true:
- Все присоединённые партиции наследуют режим append-only.
- Партиция не может отключить
append_onlyпока родитель остаётся append-only —42809.
CREATE TABLE events (
id INTEGER PRIMARY KEY,
ts DATE NOT NULL
) PARTITION BY RANGE (ts) WITH (append_only = true);
-- partitions inherit append_only
CREATE TABLE events_2026 PARTITION OF events
FOR VALUES FROM ('2026-01-01') TO ('2027-01-01');
Current v0 bounds
| Ограничение | Статус |
|---|---|
| Одноколоночный partition key | Единственный поддерживаемый |
| Hash partitioning | Не поддерживается |
| Subpartitioning | Не поддерживается |
Неподдерживаемые формы возвращают 0A000 feature_not_supported.
Expected SQLSTATE
| Ситуация | SQLSTATE |
|---|---|
| No matching partition, no DEFAULT | 23514 |
| Hash partitioning | 0A000 |
| Multi-column partition key | 0A000 |
| Subpartitioning | 0A000 |
| Disable append-only on child (parent is append-only) | 42809 |
Links
- DDL reference: ddl.md
- DML (INSERT routing): dml.md
- SQL compatibility overview: overview.md
- Known issues: Known issues