Глава 8. Типы данных

Содержание
8.1. Числовые типы
8.1.1. Целочисленные типы
8.1.2. Числа с фиксированной точностью
8.1.3. Типы с плавающей точкой
8.1.4. Последовательные типы
8.2. Денежные типы
8.3. Символьные типы
8.4. Двоичные типы данных
8.4.1. Шестнадцатеричный формат bytea
8.4.2. Формат спецпоследовательностей bytea
8.5. Типы даты/времени
8.5.1. Ввод даты/времени
8.5.2. Вывод даты/времени
8.5.3. Часовые пояса
8.5.4. Ввод интервалов
8.5.5. Вывод интервалов
8.6. Логический тип
8.7. Типы перечислений
8.7.1. Объявление перечислений
8.7.2. Порядок
8.7.3. Безопасность типа
8.7.4. Тонкости реализации
8.8. Геометрические типы
8.8.1. Точки
8.8.2. Прямые
8.8.3. Отрезки
8.8.4. Прямоугольники
8.8.5. Пути
8.8.6. Многоугольники
8.8.7. Окружности
8.9. Типы, описывающие сетевые адреса
8.9.1. inet
8.9.2. cidr
8.9.3. Различия inet и cidr
8.9.4. macaddr
8.10. Битовые строки
8.11. Типы, предназначенные для текстового поиска
8.11.1. tsvector
8.11.2. tsquery
8.12. Тип UUID
8.13. Тип XML
8.13.1. Создание XML-значений
8.13.2. Обработка кодировки
8.13.3. Обращение к XML-значениям
8.14. Типы JSON
8.14.1. Синтаксис вводимых и выводимых значений JSON
8.14.2. Эффективная организация документов JSON
8.14.3. Проверки на вхождение и существование jsonb
8.14.4. Индексация jsonb
8.15. Массивы
8.15.1. Объявления типов массивов
8.15.2. Ввод значения массива
8.15.3. Обращение к массивам
8.15.4. Изменение массивов
8.15.5. Поиск значений в массивах
8.15.6. Синтаксис вводимых и выводимых значений массива
8.16. Составные типы
8.16.1. Объявление составных типов
8.16.2. Ввод значения составного типа
8.16.3. Обращение к составным типам
8.16.4. Изменение составных типов
8.16.5. Синтаксис вводимых и выводимых значений составного типа
8.17. Диапазонные типы
8.17.1. Встроенные диапазонные типы
8.17.2. Примеры
8.17.3. Включение и исключение границ
8.17.4. Неограниченные (бесконечные) диапазоны
8.17.5. Ввод/вывод диапазонов
8.17.6. Конструирование диапазонов
8.17.7. Типы дискретных диапазонов
8.17.8. Определение новых диапазонных типов
8.17.9. Индексация
8.17.10. Ограничения для диапазонов
8.18. Идентификаторы объектов
8.19. Тип pg_lsn
8.20. Псевдотипы

PostgreSQL предоставляет пользователям богатый ассортимент встроенных типов данных. Кроме того, пользователи могут создавать свои типы в PostgreSQL, используя команду CREATE TYPE.

Таблица 8-1 содержит все встроенные типы данных общего пользования. Многие из альтернативных имён, приведённых в колонке "Псевдонимы", используются внутри PostgreSQL по историческим причинам. В этот список не включены некоторые устаревшие типы и типы для внутреннего применения.

Таблица 8-1. Типы данных

ИмяПсевдонимыОписание
bigintint8знаковое целое из 8 байт
bigserialserial8восьмибайтное целое с автоувеличением
bit [ (n) ] Ð±Ð¸Ñ‚овая строка фиксированной длины
bit varying [ (n) ]varbitбитовая строка переменной длины
booleanboolлогическое значение (true/false)
box Ð¿Ñ€ÑÐ¼Ð¾ÑƒÐ³Ð¾Ð»ÑŒÐ½Ð¸Ðº в плоскости
bytea Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ñ‹Ðµ данные ("массив байт")
character [ (n) ]char [ (n) ]символьная строка фиксированной длины
character varying [ (n) ]varchar [ (n) ]символьная строка переменной длины
cidr ÑÐµÑ‚евой адрес IPv4 или IPv6
circle ÐºÑ€ÑƒÐ³ в плоскости
date ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ð½Ð°Ñ дата (год, месяц, день)
double precisionfloat8число двойной точности с плавающей точкой (8 байт)
inet Ð°Ð´Ñ€ÐµÑ узла IPv4 или IPv6
integerint, int4знаковое четырёхбайтное целое
interval [ поля ] [ (p) ] Ð¸Ð½Ñ‚ервал времени
json Ñ‚екстовые данные JSON
jsonb Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ñ‹Ðµ данные JSON, разобранные
line Ð¿Ñ€ÑÐ¼Ð°Ñ в плоскости
lseg Ð¾Ñ‚резок в плоскости
macaddr MAC-адрес
money Ð´ÐµÐ½ÐµÐ¶Ð½Ð°Ñ сумма
numeric [ (p, s) ]decimal [ (p, s) ]вещественное число заданной точности
path Ð³ÐµÐ¾Ð¼ÐµÑ‚рический путь в плоскости
pg_lsn ÐŸÐ¾ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ñ‚ельный номер в журнале PostgreSQL
point Ð³ÐµÐ¾Ð¼ÐµÑ‚рическая точка в плоскости
polygon Ð·Ð°Ð¼ÐºÐ½ÑƒÑ‚ый геометрический путь в плоскости
realfloat4число одинарной точности с плавающей точкой (4 байта)
smallintint2знаковое двухбайтное целое
smallserialserial2двухбайтное целое с автоувеличением
serialserial4четырёхбайтное целое с автоувеличением
text ÑÐ¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ð°Ñ строка переменной длины
time [ (p) ] [ without time zone ] Ð²Ñ€ÐµÐ¼Ñ суток (без часового пояса)
time [ (p) ] with time zonetimetzвремя суток с учётом часового пояса
timestamp [ (p) ] [ without time zone ] Ð´Ð°Ñ‚а и время (без часового пояса)
timestamp [ (p) ] with time zonetimestamptzдата и время с учётом часового пояса
tsquery Ð·Ð°Ð¿Ñ€Ð¾Ñ текстового поиска
tsvector Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚ для текстового поиска
txid_snapshot ÑÐ½Ð¸Ð¼Ð¾Ðº идентификатора транзакций
uuid ÑƒÐ½Ð¸Ð²ÐµÑ€ÑÐ°Ð»ÑŒÐ½Ñ‹Ð¹ уникальный идентификатор
xml XML-данные

Совместимость: В стандарте SQL описаны следующие типы (или их имена): bigint, bit, bit varying, boolean, char, character varying, character, varchar, date, double precision, integer, interval, numeric, decimal, real, smallint, time (с часовым поясом и без), timestamp (с часовым поясом и без), xml.

Каждый тип данных имеет внутреннее представление, скрытое функциями ввода и вывода. При этом многие встроенные типы стандартны и имеют очевидные внешние форматы. Однако есть типы, уникальные для PostgreSQL, например геометрические пути, и есть типы, которые могут иметь разные форматы, например, дата и время. Некоторые функции ввода и вывода не являются в точности обратными друг к другу, то есть результат функции вывода может не совпадать со входным значением из-за потери точности.