Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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

OptionValuesDefaultDescription
append_onlytrue / falsefalseReject UPDATE/DELETE (SQLSTATE 42809)
mutation_policyunrestricted / append_only / no_deleteunrestrictedFine-grained mutation control
stats_level_max030Max statistics collection level
stats_reservoir_size≥ 1Engine defaultReservoir 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 EXISTS42P07
DROP SEQUENCE несуществующего имени без IF EXISTS42P01
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

TypeAliases
intint4, integer
bigintint8
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 FK0A000
Составной / expression индекс0A000
Неподдерживаемый index method0A000
stats_level_max вне [0..3]22023