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

Обзор совместимости SQL

AngaraBase реализует подмножество PostgreSQL SQL через pgwire-протокол. Принцип — fail-closed: неподдерживаемая конструкция возвращает явный SQLSTATE (чаще всего 0A000 feature_not_supported), а не молчаливый некорректный результат. Эта страница — карта того, что поддержано, и как быстро интерпретировать ошибки.

Стандартные SQL-конструкции

Матрица того, что AngaraBase понимает в запросах. Поддерживается — корректная семантика с pinned-тестами; Частично — работает с ограничениями (см. заметку); 0A000 — неподдержанная форма возвращает детерминированную ошибку.

Запросы (SELECT)

КонструкцияСтатусЗаметка
SELECT … FROM … WHERE …, LIMIT, OFFSET✅ Поддерживаетсяпредикаты: сравнения, IN, BETWEEN, IS [NOT] NULL, AND/OR/NOT, boolean-колонка как предикат
ORDER BY <col> / <expr> / порядковый номер✅ ПоддерживаетсяNULLS FIRST/LAST и COLLATE0A000; неверный ordinal → 42P10
DISTINCT✅ ПоддерживаетсяDISTINCT ON (...)0A000
GROUP BY (в т.ч. многоключевой) · HAVING✅ Поддерживаетсяагрегаты COUNT/SUM/MIN/MAX/AVG; HAVING без GROUP BY тоже
WITH (CTE, non-recursive)✅ ПоддерживаетсяCTE как источник в FROM; WITH RECURSIVE и data-modifying CTE0A000 (recursive — planned v0.7)
Подзапросы: IN (…), EXISTS/NOT EXISTS, скалярный в SELECT✅ Поддерживаетсякоррелированные поддержаны
Множества: UNION, UNION ALL, INTERSECT, EXCEPT✅ Поддерживаетсяhash-based dedup

JOIN

КонструкцияСтатусЗаметка
INNER, LEFT [OUTER], RIGHT [OUTER], FULL [OUTER], CROSS✅ Поддерживаетсявсе пять видов
Условие соединенияON <expr>USING (...) и NATURAL JOIN0A000
LATERAL (…)✅ Поддерживаетсякоррелированная производная таблица
CROSS JOIN бюджет строк⚠️ Частичнолимит sql.join.max_cross_join_rows (деф. 1 000 000); превышение → 54000

Оконные функции (OVER (…))

ФункцияСтатусЗаметка
ROW_NUMBER, RANK, DENSE_RANK✅ ПоддерживаетсяPARTITION BY / ORDER BY
LAG, LEAD, FIRST_VALUE, LAST_VALUE✅ Поддерживается
SUM/COUNT/AVG/MIN/MAX OVER (…)✅ Поддерживаетсяоконные агрегаты
NTILE, именованные окна (WINDOW-clause)0A000

DDL / DML / типы

Подробные таблицы и Expected SQLSTATE — на страницах раздела:

ТемаСтраницаСтатус
Типы данныхdata-types.mdStable
DDL (CREATE, ALTER, DROP)ddl.mdStable
DML (INSERT, UPDATE, DELETE)dml.mdStable
Запросы (CTE, JOIN, ORDER BY)queries.mdStable
Секционирование таблицpartitioning.mdBaseline

Ключевые DDL-границы: CREATE MATERIALIZED VIEW поддержан, обычный CREATE VIEW — planned (0A000), CREATE TRIGGER — non-goal (0A000), FOREIGN KEY — принимается как NOT ENFORCED.

Коды ошибок (SQLSTATE) — быстрый справочник

SQLSTATEИмяТипичный сценарий
0A000feature_not_supportedWITH RECURSIVE, JOIN … USING/NATURAL, NTILE, именованные окна, DISTINCT ON, обычный CREATE VIEW (planned), CREATE TRIGGER (non-goal), сложные RLS-предикаты
54000program_limit_exceededCROSS JOIN сверх бюджета sql.join.max_cross_join_rows (деф. 1 000 000)
23514check_violationроутинг секций: нет подходящей партиции и нет DEFAULT
42809wrong_object_typeUPDATE/DELETE на append-only; PK/FK update под no_delete
22023invalid_parameter_valueневерный stats_level_max, break-glass TTL, setval вне [MINVALUE..MAXVALUE]
42501insufficient_privilegeнет ролей для security-операций, нет SecurityContext
25001active_sql_transactionSET SESSION CONTEXT внутри активной транзакции
42P10invalid_column_referenceORDER BY по номеру вне диапазона колонок
2200Hsequence_generator_limit_exceedednextval за MAXVALUE/MINVALUE без CYCLE
55000object_not_in_prerequisite_statecurrval(seq) до первого nextval в этой сессии
42P07duplicate_objectCREATE SEQUENCE существующего имени без IF NOT EXISTS
42P01undefined_tableDROP SEQUENCE / nextval / currval / setval несуществующей последовательности
428C9generated_alwaysINSERT явного non-NULL в GENERATED ALWAYS AS IDENTITY

Полный список с контекстом: Известные ограничения и SQLSTATE.

Подключение ORM и инструментов

ORM и клиенты (DBeaver, psql, Hibernate, Django и др.) при подключении выполняют служебные pg_catalog-запросы. AngaraBase поддерживает базовую интроспекцию pg_catalog, нужную для подключения этих инструментов. Если клиент не подключается, проверьте Совместимость клиентов.

Если запрос зависает (нет ответа), это ошибка с нашей стороны — пожалуйста, соберите артефакты по инструкции в Поддержке и сообщите нам.

Встроенные функции SQL

ФункцияСигнатураОписание
NOW()() → timestampТекущее время UTC
CURRENT_TIMESTAMP() → timestampАлиас для NOW()
date_trunc(field, ts)(text, timestamp) → timestampУсечение до field (secondmillennium); неизвестное поле → NULL
set_config(name, val, local)(text, text, bool) → textЗаглушка: возвращает val (совместимость с Django)
obj_description(oid, cat)(oid, text) → textЗаглушка: возвращает NULL (интроспекция Django)

Видимость векторного выполнения

Когда режим выполнения допускает векторный путь (ANGARABASE_SQL_EXECUTION_MODE=auto для поддержанных планов или force_vector), EXPLAIN показывает имена векторных операторов: VectorSeqScan, VectorFilter, VectorProject, VectorHashJoin, VectorAgg. Если форму плана AngaraVector не поддерживает, в EXPLAIN остаются строчные (row) операторы.

Режимы ANGARABASE_SQL_EXECUTION_MODE:

  • auto (по умолчанию) — Stable векторный путь только для полностью поддержанных форм, иначе детерминированный откат на строчный;
  • force_rowStable всегда строчный исполнитель;
  • force_vectorExperimental fail-closed с feature_not_supported, если векторное выполнение невозможно; для целевого тестирования, не для production-нагрузки в 0.6.x.

Опции таблиц AngaraMemory

CREATE TABLE ... WITH (...) поддерживает bounded-таблицы в памяти:

  • storage='memory'Baseline движок таблиц AngaraMemory;
  • durability='none'|'logged'|'snapshotted'Baseline volatile/durable;
  • max_rows=<n>Stable жёсткий лимит строк; переполнение fail-closed (54023);
  • eviction_policy='error'|'fifo'Experimental по умолчанию error;
  • checkpoint_interval_ms=<n>Baseline имеет смысл только при durability='snapshotted'.

Если max_rows не задан, применяется bounded-дефолт из политики инстанса. При durability='snapshotted' горячий путь DML не персистит страницы немедленно — запись планирует checkpoint-воркер по checkpoint_interval_ms.

Ссылки