Глава 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.9.5. macaddr8
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.14.5. Обращение по индексу к элементам jsonb
8.14.6. Трансформации
8.14.7. Тип jsonpath
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.16.6. Синтаксис вводимых и выводимых значений составного типа
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. Идентификаторы объектов
8.20. Тип pg_lsn
8.21. Псевдотипы

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

Таблица 8.1 содержит все встроенные типы данных общего пользования. Многие из альтернативных имён, приведённых в столбце «Псевдонимы», используются внутри Postgres Pro по историческим причинам. В этот список не включены некоторые устаревшие типы и типы для внутреннего применения.

Таблица 8.1. Типы данных

ИмяПсевдонимыОписание
bigintint8знаковое целое из 8 байт
bigserialserial8восьмибайтное целое с автоувеличением
bit [ (n) ] битовая строка фиксированной длины
bit varying [ (n) ]varbit [ (n) ]битовая строка переменной длины
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-адрес
macaddr8 адрес MAC (Media Access Control) (в формате EUI-64)
money денежная сумма
numeric [ (p, s) ]decimal [ (p, s) ]вещественное число заданной точности
path геометрический путь в плоскости
pg_lsn последовательный номер в журнале Postgres Pro
pg_snapshot снимок идентификатора транзакций
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 снимок идентификаторов транзакций для пользовательского уровня (устаревший тип; см. pg_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.

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

Chapter 8. Data Types

Table of Contents

8.1. Numeric Types
8.1.1. Integer Types
8.1.2. Arbitrary Precision Numbers
8.1.3. Floating-Point Types
8.1.4. Serial Types
8.2. Monetary Types
8.3. Character Types
8.4. Binary Data Types
8.4.1. bytea Hex Format
8.4.2. bytea Escape Format
8.5. Date/Time Types
8.5.1. Date/Time Input
8.5.2. Date/Time Output
8.5.3. Time Zones
8.5.4. Interval Input
8.5.5. Interval Output
8.6. Boolean Type
8.7. Enumerated Types
8.7.1. Declaration of Enumerated Types
8.7.2. Ordering
8.7.3. Type Safety
8.7.4. Implementation Details
8.8. Geometric Types
8.8.1. Points
8.8.2. Lines
8.8.3. Line Segments
8.8.4. Boxes
8.8.5. Paths
8.8.6. Polygons
8.8.7. Circles
8.9. Network Address Types
8.9.1. inet
8.9.2. cidr
8.9.3. inet vs. cidr
8.9.4. macaddr
8.9.5. macaddr8
8.10. Bit String Types
8.11. Text Search Types
8.11.1. tsvector
8.11.2. tsquery
8.12. UUID Type
8.13. XML Type
8.13.1. Creating XML Values
8.13.2. Encoding Handling
8.13.3. Accessing XML Values
8.14. JSON Types
8.14.1. JSON Input and Output Syntax
8.14.2. Designing JSON Documents
8.14.3. jsonb Containment and Existence
8.14.4. jsonb Indexing
8.14.5. jsonb Subscripting
8.14.6. Transforms
8.14.7. jsonpath Type
8.15. Arrays
8.15.1. Declaration of Array Types
8.15.2. Array Value Input
8.15.3. Accessing Arrays
8.15.4. Modifying Arrays
8.15.5. Searching in Arrays
8.15.6. Array Input and Output Syntax
8.16. Composite Types
8.16.1. Declaration of Composite Types
8.16.2. Constructing Composite Values
8.16.3. Accessing Composite Types
8.16.4. Modifying Composite Types
8.16.5. Using Composite Types in Queries
8.16.6. Composite Type Input and Output Syntax
8.17. Range Types
8.17.1. Built-in Range and Multirange Types
8.17.2. Examples
8.17.3. Inclusive and Exclusive Bounds
8.17.4. Infinite (Unbounded) Ranges
8.17.5. Range Input/Output
8.17.6. Constructing Ranges and Multiranges
8.17.7. Discrete Range Types
8.17.8. Defining New Range Types
8.17.9. Indexing
8.17.10. Constraints on Ranges
8.18. Domain Types
8.19. Object Identifier Types
8.20. pg_lsn Type
8.21. Pseudo-Types

Postgres Pro has a rich set of native data types available to users. Users can add new types to Postgres Pro using the CREATE TYPE command.

Table 8.1 shows all the built-in general-purpose data types. Most of the alternative names listed in the Aliases column are the names used internally by Postgres Pro for historical reasons. In addition, some internally used or deprecated types are available, but are not listed here.

Table 8.1. Data Types

NameAliasesDescription
bigintint8signed eight-byte integer
bigserialserial8autoincrementing eight-byte integer
bit [ (n) ] fixed-length bit string
bit varying [ (n) ]varbit [ (n) ]variable-length bit string
booleanboollogical Boolean (true/false)
box rectangular box on a plane
bytea binary data (byte array)
character [ (n) ]char [ (n) ]fixed-length character string
character varying [ (n) ]varchar [ (n) ]variable-length character string
cidr IPv4 or IPv6 network address
circle circle on a plane
date calendar date (year, month, day)
double precisionfloat8double precision floating-point number (8 bytes)
inet IPv4 or IPv6 host address
integerint, int4signed four-byte integer
interval [ fields ] [ (p) ] time span
json textual JSON data
jsonb binary JSON data, decomposed
line infinite line on a plane
lseg line segment on a plane
macaddr MAC (Media Access Control) address
macaddr8 MAC (Media Access Control) address (EUI-64 format)
money currency amount
numeric [ (p, s) ]decimal [ (p, s) ]exact numeric of selectable precision
path geometric path on a plane
pg_lsn Postgres Pro Log Sequence Number
pg_snapshot user-level transaction ID snapshot
point geometric point on a plane
polygon closed geometric path on a plane
realfloat4single precision floating-point number (4 bytes)
smallintint2signed two-byte integer
smallserialserial2autoincrementing two-byte integer
serialserial4autoincrementing four-byte integer
text variable-length character string
time [ (p) ] [ without time zone ] time of day (no time zone)
time [ (p) ] with time zonetimetztime of day, including time zone
timestamp [ (p) ] [ without time zone ] date and time (no time zone)
timestamp [ (p) ] with time zonetimestamptzdate and time, including time zone
tsquery text search query
tsvector text search document
txid_snapshot user-level transaction ID snapshot (deprecated; see pg_snapshot)
uuid universally unique identifier
xml XML data

Compatibility

The following types (or spellings thereof) are specified by SQL: bigint, bit, bit varying, boolean, char, character varying, character, varchar, date, double precision, integer, interval, numeric, decimal, real, smallint, time (with or without time zone), timestamp (with or without time zone), xml.

Each data type has an external representation determined by its input and output functions. Many of the built-in types have obvious external formats. However, several types are either unique to Postgres Pro, such as geometric paths, or have several possible formats, such as the date and time types. Some of the input and output functions are not invertible, i.e., the result of an output function might lose accuracy when compared to the original input.