Перейти к содержанию

Типы данных

Каждый тип в 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.

См. также: