Типы данных¶
Каждый тип в Picodata в дополнение к поддерживаемым значениям позволяет хранить NULL
(UNKNOWN в терминологии троичной логики).
Типы данных в Picodata делятся на две категории:
-
Базовые типы — фундаментальные типы, которые можно использовать везде (в определениях таблиц, определениях процедур, кастах и т.д.)
-
Доменные типы — специализированные типы, построенные на основе базовых с добавлением ограничений
-
На данный момент поддерживаются только в DDL (определение таблиц)
-
В DQL/DML (запросы и модификация данных) доменные типы не разрешены
-
Базовые типы¶
На данный момент в Picodata поддерживаются следующие базовые типы:
BOOLEAN¶
Логический тип данных, поддерживаемые значения: FALSE и TRUE. По правилам сравнения
FALSE меньше TRUE.
Синонимы: BOOLEAN, BOOL.
DECIMAL¶
Числа с фиксированной запятой, содержащие до 38 цифр и принимающие значения в диапазоне
от -99999999999999999999999999999999999999 до 99999999999999999999999999999999999999;
Примечание
Тип NUMERIC, поддерживаемый в клиентах PostgreSQL,
будет приведен в Picodata к типу DECIMAL. Ограничения PostgreSQL
на количество знаков в целой и дробной части будут проигнорированы.
DOUBLE¶
Числа с плавающей запятой стандарта IEEE 754, принимающие значения в диапазоне от
-1.79769E308 до 1.79769E308.
Помимо стандартной записи дробного числа (например, 0.5) поддерживается и
экспоненциальная форма (например, 5E-1).
Синонимы: DOUBLE, FLOAT8.
INTEGER¶
Целые числа в диапазоне от −9223372036854775808 до +9223372036854775807.
Синонимы: INTEGER, INT.
Примечание
Типы INT2, INT4, INT8, SMALLINT, BIGINT, поддерживаемые в
клиентах PostgreSQL, будут приведены в Picodata к типу INT.
JSON¶
Тип JSON предназначен для хранения данных JSON (JavaScript Object Notation, Запись объекта JavaScript) согласно стандарту RFC-7159.
Примечание
На данный момент тип JSON для колонки можно указать только при создании таблицы. Операции DML/DQL с типом JSON пока не поддерживаются.
ARRAY¶
Типизированный одномерный массив. Доступные типы элементов: BOOLEAN, DATETIME, DECIMAL, DOUBLE, INTEGER, JSON, TEXT, UUID.
Примечание
На данный момент массивы нельзя сравнивать и использовать в качестве ключей шардирования.
TEXT¶
Текстовый тип данных. Позволяет хранить текстовую строку переменной длины. Максимальная
длина составляет 2,147,483,647 байт.
Синонимы: TEXT, STRING, VARCHAR.
UUID¶
Тип универсального уникального идентификатора. Позволяет хранить 32 шестнадцатеричные цифры.
Текстовое представление UUID — это строка, разделенная дефисами на пять групп в формате
8-4-4-4-12 (например, 102be9bf-215f-4180-b4c9-cc11983e988d).
Примечание
На данный момент поддерживается только 4-я версия UUID.
DATETIME¶
Тип данных для хранения даты и времени. Диапазон корректных значений
даты и времени должен находиться между -9999-12-31 23:59:59 и
9999-12-31 23:59:59. Значение хранит смещение относительно UTC, с
которым оно было задано. Смещение должно быть кратно минуте и
находиться в диапазоне от -12 до +14 часов.
Строки преобразуются в DATETIME по правилам ввода типа
timestamp with time zone в PostgreSQL. Помимо
формата ISO 8601 (RFC-3339) допускаются, например, названия месяцев,
аббревиатуры и названия часовых поясов, а также значение epoch.
Примеры допустимых значений:
2025-10-18 02:59:59Z(нет смещения, Z означает зону UTC)2025-10-18 02:59:59 +1(смещение на 1 час к востоку)2025-10-18 02:59:59 -01:00(смещение на 1 час к западу)2025-10-18 02:59:59 +1245(смещение на 12 часов 45 минут к востоку)2025-10-18 02:59:59(время без часового пояса считается временем UTC)October 18, 2025 02:59:59 MSK(аббревиатура часового пояса)2025-10-18 02:59:59 Europe/Moscow(название часового пояса)
Неоднозначная дата вида 10/11/2025 читается как «месяц/день/год».
Дробная часть секунд округляется до микросекунд. Наименьшее значение,
которое можно задать строкой, — 4714-11-24 00:00:00 BC.
Если смещение нельзя сохранить (например, +15:00 или +03:00:30),
значение приводится к UTC, при этом момент времени не меняется.
Названия часовых поясов (например, Europe/Moscow) и часть аббревиатур
(например, MSK) определяются по базе часовых поясов IANA в каталоге
/usr/share/zoneinfo, поэтому на сервере должен быть установлен пакет
tzdata.
Не поддерживаются значения infinity и -infinity, а также значения,
зависящие от текущего времени: now, today, tomorrow и yesterday.
Доменные типы¶
Следующие типы могут использоваться только при определении колонок таблиц:
UNSIGNED¶
Тип целого беззнакового числа в диапазоне от 0 до +9223372036854775807. Другими словами — базовый тип INTEGER и ограничение >= 0.
См. также: