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

Data types

Справочник типов данных AngaraBase: что реально поддержано, что — нет, и какой SQLSTATE возвращается при приведении. Источник истины — реестр типов движка (SQL_TYPE_REGISTRY); уровни поддержки сверены по нему, а не по наличию OID в виртуальном pg_catalog.

Поддерживаемые типы

Stable — production-ready, есть pinned-тест. Baseline — реализован и пригоден, но тестовое покрытие уже.

SQL typeАлиасыpg_oidУровеньЗаметки
BOOLEANBOOL16StableTRUE / FALSE / NULL
SMALLINTINT221Baseline16-бит знаковое
INTEGERINT, INT423Stable32-бит знаковое
BIGINTINT820Stable64-бит знаковое
REALFLOAT4700BaselineОдинарная точность
DOUBLE PRECISIONFLOAT8701StableДвойная точность
NUMERICDECIMAL1700BaselineТочное число (Decimal-backed); строгий парс при явном cast
TEXT25StableСтрока переменной длины
VARCHAR(n)CHARACTER VARYING1043BaselineСтрока с лимитом (text-backed)
CHAR(n)BPCHAR, CHARACTER1042BaselineСтрока фиксированной длины (text-backed)
MVARCHAR(n)46001Baseline1С-совместимый национальный VARCHAR: UTF-16LE-семантика, сравнение без учёта регистра и хвостовых пробелов, своя нормализация ключа индекса
BYTEA17StableДвоичная строка переменной длины
UUID2950BaselineТолько явные приведения; невалидный текст → 22P02
DATE1082BaselineText-backed; минимальная валидация
TIMESTAMP1114BaselineДата-время без таймзоны (text-backed)
TIMESTAMPTZ1184BaselineПарсится для 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 typepg_oidСтатус
TIME1083Planned
INTERVAL1186Planned
JSON114Planned (функции json_agg / json_build_object возвращают text)
JSONB3802Planned

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 LAST0A000