DDL — Data Definition Language
Goal
Справочник поддерживаемых DDL-операций: создание, изменение и удаление таблиц, индексов и ограничений.
CREATE TABLE
Basic form
CREATE TABLE t (
id INTEGER PRIMARY KEY,
name VARCHAR(100) NOT NULL,
v BIGINT
);
With table options
CREATE TABLE events (
id INTEGER PRIMARY KEY,
ts TIMESTAMP NOT NULL,
data TEXT
) WITH (append_only = true);
CREATE TABLE ledger (
id INTEGER PRIMARY KEY,
amount BIGINT,
ref_id INTEGER
) WITH (mutation_policy = 'no_delete');
Constraints
PRIMARY KEY— обязателен для каждой таблицы (ровно один).NOT NULL— колонка не принимаетNULL.FOREIGN KEY ... NOT ENFORCED— декларативный FK без runtime-проверки.
CREATE TABLE orders (
id INTEGER PRIMARY KEY,
parent_id INTEGER NOT NULL,
FOREIGN KEY (parent_id) REFERENCES parents (id) NOT ENFORCED
);
Enforced foreign keys не поддерживаются — попытка создать FK без NOT ENFORCED вернёт 0A000.
ALTER TABLE
Table-level options
ALTER TABLE t SET (append_only = true);
ALTER TABLE t SET (append_only = false);
ALTER TABLE t SET (mutation_policy = 'no_delete');
ALTER TABLE t SET (mutation_policy = 'unrestricted');
ALTER TABLE t SET (stats_level_max = 2);
ALTER TABLE t SET (stats_reservoir_size = 1000);
Column-level options
ALTER TABLE t ALTER COLUMN v SET (stats_level_max = 1);
Table options reference
| Option | Values | Default | Description |
|---|---|---|---|
append_only | true / false | false | Reject UPDATE/DELETE (SQLSTATE 42809) |
mutation_policy | unrestricted / append_only / no_delete | unrestricted | Fine-grained mutation control |
stats_level_max | 0–3 | 0 | Max statistics collection level |
stats_reservoir_size | ≥ 1 | Engine default | Reservoir sample size for Level 2 stats |
append_only = true эквивалентен mutation_policy = 'append_only'.
DROP TABLE
DROP TABLE t;
При DROP TABLE каскадно удаляются связанные owned-последовательности
(SERIAL/IDENTITY), даже без CASCADE (поведение PostgreSQL).
CREATE / ALTER / DROP SEQUENCE
AngaraBase поддерживает first-class объекты-последовательности
(SEQUENCE) — RM-0.6.3.7, RFC-2026-497. Они сохраняются в sys_catalog,
переживают рестарт сервера и обслуживают SERIAL/BIGSERIAL и
GENERATED [ALWAYS|BY DEFAULT] AS IDENTITY.
CREATE SEQUENCE
CREATE SEQUENCE s1; -- start=1, inc=1, без верхней границы
CREATE SEQUENCE s2 START WITH 100 INCREMENT BY 5;
CREATE SEQUENCE s3 MINVALUE 1 MAXVALUE 999 CYCLE; -- циклический счётчик
CREATE SEQUENCE IF NOT EXISTS s1; -- идемпотентно
Опции (порядок свободный):
START WITH n, INCREMENT BY n, MINVALUE n / NO MINVALUE,
MAXVALUE n / NO MAXVALUE, CYCLE / NO CYCLE.
ALTER SEQUENCE
ALTER SEQUENCE s1 INCREMENT BY 10;
ALTER SEQUENCE s1 RESTART WITH 1; -- сбросить счётчик
ALTER SEQUENCE s1 MAXVALUE 1000 NO CYCLE;
ALTER SEQUENCE t_id_seq OWNED BY t.id; -- привязка к колонке
ALTER SEQUENCE s1 OWNED BY NONE; -- отвязать
DROP SEQUENCE
DROP SEQUENCE s1;
DROP SEQUENCE IF EXISTS s1;
DROP SEQUENCE s1 CASCADE;
Поведение функций
См. dml.md — раздел «Sequence functions» (nextval, currval,
setval).
SQLSTATE
| Ситуация | SQLSTATE |
|---|---|
CREATE SEQUENCE с уже существующим именем без IF NOT EXISTS | 42P07 |
DROP SEQUENCE несуществующего имени без IF EXISTS | 42P01 |
ALTER SEQUENCE несуществующей последовательности | 42P01 |
MINVALUE > MAXVALUE или START вне [MIN..MAX] | 22023 |
CREATE INDEX
AngaraBase поддерживает одноколоночные индексы двух типов: btree (default) и brin.
-- btree (default)
CREATE INDEX idx_t_v ON t (v);
-- btree (explicit)
CREATE INDEX idx_t_v ON t USING btree (v);
-- brin
CREATE INDEX idx_events_ts ON events USING brin (ts);
BRIN supported key types
| Type | Aliases |
|---|---|
int | int4, integer |
bigint | int8 |
date | — |
timestamp | — |
timestamptz | — |
BRIN остаётся accelerator path с heap fetch + MVCC predicate recheck.
Current bounds
- Только одноколоночные индексы.
- Составные и выражения-индексы не поддерживаются —
0A000. - Unsupported index methods (GIN, GiST и др.) —
0A000.
Expected SQLSTATE
| Ситуация | SQLSTATE |
|---|---|
| Неподдерживаемая DDL-форма | 0A000 |
| Enforced FK | 0A000 |
| Составной / expression индекс | 0A000 |
| Неподдерживаемый index method | 0A000 |
stats_level_max вне [0..3] | 22023 |
Links
- Data types: data-types.md
- DML (INSERT/UPDATE/DELETE): dml.md
- Partitioning (CREATE TABLE … PARTITION BY): partitioning.md
- Known issues: Known issues