Data types
Справочник типов данных AngaraBase: что реально поддержано, что — нет, и какой
SQLSTATE возвращается при приведении. Источник истины — реестр типов движка
(SQL_TYPE_REGISTRY); уровни поддержки сверены по нему, а не по наличию OID в
виртуальном pg_catalog.
Поддерживаемые типы
Stable — production-ready, есть pinned-тест. Baseline — реализован и пригоден,
но тестовое покрытие уже.
| SQL type | Алиасы | pg_oid | Уровень | Заметки |
|---|---|---|---|---|
BOOLEAN | BOOL | 16 | Stable | TRUE / FALSE / NULL |
SMALLINT | INT2 | 21 | Baseline | 16-бит знаковое |
INTEGER | INT, INT4 | 23 | Stable | 32-бит знаковое |
BIGINT | INT8 | 20 | Stable | 64-бит знаковое |
REAL | FLOAT4 | 700 | Baseline | Одинарная точность |
DOUBLE PRECISION | FLOAT8 | 701 | Stable | Двойная точность |
NUMERIC | DECIMAL | 1700 | Baseline | Точное число (Decimal-backed); строгий парс при явном cast |
TEXT | — | 25 | Stable | Строка переменной длины |
VARCHAR(n) | CHARACTER VARYING | 1043 | Baseline | Строка с лимитом (text-backed) |
CHAR(n) | BPCHAR, CHARACTER | 1042 | Baseline | Строка фиксированной длины (text-backed) |
MVARCHAR(n) | — | 46001 | Baseline | 1С-совместимый национальный VARCHAR: UTF-16LE-семантика, сравнение без учёта регистра и хвостовых пробелов, своя нормализация ключа индекса |
BYTEA | — | 17 | Stable | Двоичная строка переменной длины |
UUID | — | 2950 | Baseline | Только явные приведения; невалидный текст → 22P02 |
DATE | — | 1082 | Baseline | Text-backed; минимальная валидация |
TIMESTAMP | — | 1114 | Baseline | Дата-время без таймзоны (text-backed) |
TIMESTAMPTZ | — | 1184 | Baseline | Парсится для cast / AS OF; смещение не сохраняется |
MVARCHAR — национальный VARCHAR для 1С
MVARCHAR — собственный тип AngaraBase для совместимости с 1С: сравнение
регистронезависимое и без учёта хвостовых ASCII-пробелов, длина задаётся как
MVARCHAR(N), для индекса применяется отдельная нормализация ключа.
CREATE TABLE catalog (code MVARCHAR(16), name MVARCHAR(255));
-- 'Тест ' и 'тест' сравниваются как равные
Text-backed temporal types
DATE / TIMESTAMP / TIMESTAMPTZ хранятся в text-backed режиме:
- Сравнения — текстовые (лексикографические); формат ISO 8601 гарантирует корректный порядок.
TIMESTAMPсериализуется в UTC без смещения (2026-05-07 14:30:00.123); хвостовые нули микросекунд обрезаются.- BRIN-индексы на
date/timestamp/timestamptzподдерживаются (текстовые min/max).
Planned (пока недоступны)
Эти типы зарегистрированы в pg_catalog для интроспекции, но не пригодны к
использованию — приведение к ним возвращает 0A000:
| SQL type | pg_oid | Статус |
|---|---|---|
TIME | 1083 | Planned |
INTERVAL | 1186 | Planned |
JSON | 114 | Planned (функции json_agg / json_build_object возвращают text) |
JSONB | 3802 | Planned |
NULL handling
- Все типы допускают
NULL, если колонка не объявлена какNOT NULL. - В
ORDER BY ASCзначенияNULLтрактуются как наибольшие (выводятся последними). - Явное управление
NULLS FIRST/NULLS LASTне поддерживается —0A000.
Type casting
AngaraBase поддерживает PostgreSQL-синтаксис приведения:
SELECT '42'::INTEGER;
SELECT id::TEXT FROM t;
SELECT '550e8400-e29b-41d4-a716-446655440000'::UUID;
Expected SQLSTATE
| Ситуация | SQLSTATE |
|---|---|
Неподдерживаемый/Planned тип в DDL или cast (TIME, INTERVAL, JSON, JSONB) | 0A000 |
Невалидный текст при приведении (например, в NUMERIC / UUID / float) | 22P02 |
NULLS FIRST / NULLS LAST | 0A000 |
Links
- SQL compatibility overview: overview.md
- DDL (CREATE TABLE с типами): ddl.md
- Known issues: Known issues