Типы данных
Тип столбца определяет представление значений и преобразования, необходимые при записи. Разные названия SQL не всегда обозначают разные типы: некоторые имена ниже соответствуют одному внутреннему представлению.
Поддерживаемые типы
Заголовок раздела «Поддерживаемые типы»| Тип | Допустимые псевдонимы | Представление |
|---|---|---|
| INTEGER | INT, BIGINT, SMALLINT, TINYINT | Знаковое 64-битное целое |
| FLOAT | DOUBLE, REAL | 64-битное число с плавающей точкой |
| DECIMAL | NUMERIC | Точное десятичное число с precision и scale |
| TEXT | VARCHAR, CHAR, STRING, CLOB | Текст UTF-8 |
| BOOLEAN | BOOL | Истина или ложь |
| TIMESTAMP | DATETIME, TIME | Временная метка, не отдельный тип времени суток |
| DATE | Календарная дата | |
| UUID | 16-байтовый идентификатор | |
| BYTES | BLOB, BINARY, VARBINARY | Произвольные байты |
| JSON | JSONB | Значение JSON |
| VECTOR | Векторное значение |
NULL обозначает отсутствие значения. Столбец, допускающий NULL, может содержать его независимо от объявленного типа. NULL не заменяет прикладной тип столбца.
External types
Заголовок раздела «External types»Trusted native extension может добавить catalog-bound scalar type командой
CREATE TYPE ... FROM EXTENSION. Package descriptor задает stable object ID,
fixed или variable storage shape, canonical codec revision, maximum payload и
optional semantics equality, hash и ordering. SQL name является schema alias
этой identity и может быть переименован без изменения stored bytes.
External values передаются через protocol 17 вместе с type object ID и codec
revision. Они не заменяются на BYTES, а generic ORM не декодирует их без
plugin-aware adapter. В Rust SDK 1.2 также нет generic SQL literal input/output
callback, поэтому value обычно создается native function или typed client
adapter. См. «Команды native extensions» и
«Разработку native extensions».
Целые числа, текст и логические значения
Заголовок раздела «Целые числа, текст и логические значения»SMALLINT и TINYINT не задают 16-битные или 8-битные границы. Это псевдонимы
INTEGER. Если приложению нужен более узкий диапазон, задайте ограничение.
CREATE TABLE typed_values (id SMALLINT, label TEXT, active BOOL);INSERT INTO typed_values VALUES (100000, 'ready', TRUE);SELECT id, label, active FROM typed_values;Строка содержит 100000, ready и true. Диапазон INTEGER:
от -9223372036854775808 до 9223372036854775807. FLOAT является приближённым
представлением и не равнозначен точному десятичному числу.
Используйте TEXT или текстовый псевдоним без параметров, например VARCHAR.
Модификаторы длины VARCHAR(255) и CHAR(10) в этой версии отклоняются,
а не принимаются как молча игнорируемые ограничения. Это правило также
отклоняет модификаторы других типов, кроме DECIMAL/NUMERIC и VECTOR.
Десятичные числа
Заголовок раздела «Десятичные числа»DECIMAL(p,s) задаёт общую точность и число дробных разрядов. Точность находится
в диапазоне от 1 до 38, а число дробных разрядов не превышает точность.
Для DECIMAL(p) число дробных разрядов равно нулю. DECIMAL без параметров
допустим без объявленного ограничения precision/scale.
CREATE TABLE prices (amount DECIMAL(6,2));INSERT INTO prices VALUES (12.34);SELECT CAST(amount AS TEXT) AS amount FROM prices;Результат равен 12.34. Точное хранение не обещает, что любое арифметическое
выражение со смешанными типами повторяет правила округления другой СУБД.
Для точных значений используйте типизированные параметры клиента и проверяйте
контракт преобразования и арифметики нужной операции.
Даты, идентификаторы и байты
Заголовок раздела «Даты, идентификаторы и байты»DATE представляет календарный день; TIMESTAMP, DATETIME и TIME используют одно представление временной метки. Не воспринимайте TIME как отдельный SQL-тип только для времени суток. UUID имеет типизированное представление, а не является произвольным текстовым столбцом. BYTES хранит данные без требования корректного UTF-8.
SELECT CAST('2026-09-08' AS DATE) AS day, CAST('01940000-0020-7000-8000-000000000001' AS UUID) AS id, FROM_HEX('00ff7f') AS bytes;Возвращаются дата, указанный UUID и три байта 00 ff 7f. Отображение зависит
от клиента. В JSON-выводе CLI дата содержит days_since_unix_epoch,
а BYTES содержит raw_hex: не каждая типизированная ячейка использует
скалярное поле value. Некорректная шестнадцатеричная запись отклоняется.
JSON и векторы
Заголовок раздела «JSON и векторы»JSONB является псевдонимом JSON; название не означает поддержку операторов PostgreSQL JSONB или его дискового формата. Аналогично, объявление VECTOR само по себе не определяет семантику всех векторных функций и индексов.
VECTOR(n) сохраняет размерность от 1 до 65535. Размерности вне диапазона
отклоняются. Контракты индексов и функций отделены от распознавания имени типа
и должны проверяться для используемых приложением операций.
Преобразования и ограничения
Заголовок раздела «Преобразования и ограничения»Для явного преобразования используйте CAST(expression AS type).
Запись значения в типизированный столбец тоже может требовать преобразования.
Недопустимое преобразование не следует считать отсутствующим значением:
обрабатывайте ошибку операции. NOT NULL, ключи и другие ограничения
задаются отдельно от выбора типа.
Далее читайте выражения: арифметику, сравнения и NULL.