Глава 8. Типы данных
- Содержание
- 8.1. Числовые типы
- 8.1.1. Целочисленные типы
- 8.1.2. Числа с фиксированной точностью
- 8.1.3. Типы с плавающей точкой
- 8.1.4. Последовательные типы
- 8.1.2. Числа с фиксированной точностью
- 8.1.1. Целочисленные типы
- 8.2. Денежные типы
- 8.3. Символьные типы
- 8.4. Двоичные типы данных
- 8.3. Символьные типы
- 8.5. Типы даты/времени
- 8.5.1. Ввод даты/времени
- 8.5.2. Вывод даты/времени
- 8.5.3. Часовые пояса
- 8.5.4. Ввод интервалов
- 8.5.5. Вывод интервалов
- 8.5.2. Вывод даты/времени
- 8.5.1. Ввод даты/времени
- 8.6. Логический тип
- 8.7. Типы перечислений
- 8.7.1. Объявление перечислений
- 8.7.2. Порядок
- 8.7.3. Безопасность типа
- 8.7.4. Тонкости реализации
- 8.7.2. Порядок
- 8.7.1. Объявление перечислений
- 8.8. Геометрические типы
- 8.8.1. Точки
- 8.8.2. Прямые
- 8.8.3. Отрезки
- 8.8.4. Прямоугольники
- 8.8.5. Пути
- 8.8.6. Многоугольники
- 8.8.7. Окружности
- 8.8.2. Прямые
- 8.8.1. Точки
- 8.9. Типы, описывающие сетевые адреса
- 8.9.1. inet
- 8.9.2. cidr
- 8.9.3. Различия inet и cidr
- 8.9.4. macaddr
- 8.9.2. cidr
- 8.9.1. inet
- 8.10. Битовые строки
- 8.11. Типы, предназначенные для текстового поиска
- 8.12. Тип UUID
- 8.13. Тип XML
- 8.13.1. Создание XML-значений
- 8.13.2. Обработка кодировки
- 8.13.3. Обращение к XML-значениям
- 8.13.2. Обработка кодировки
- 8.13.1. Создание XML-значений
- 8.14. Типы JSON
- 8.15. Массивы
- 8.15.1. Объявления типов массивов
- 8.15.2. Ввод значения массива
- 8.15.3. Обращение к массивам
- 8.15.4. Изменение массивов
- 8.15.5. Поиск значений в массивах
- 8.15.6. Синтаксис вводимых и выводимых значений массива
- 8.15.2. Ввод значения массива
- 8.15.1. Объявления типов массивов
- 8.16. Составные типы
- 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.17.2. Примеры
- 8.17.1. Встроенные диапазонные типы
- 8.18. Идентификаторы объектов
- 8.19. Тип pg_lsn
- 8.20. Псевдотипы
- 8.19. Тип pg_lsn
PostgreSQL предоставляет пользователям богатый ассортимент встроенных типов данных. Кроме того, пользователи могут создавать свои типы в PostgreSQL, используя команду CREATE TYPE.
Таблица 8-1 содержит все встроенные типы данных общего пользования. Многие из альтернативных имён, приведённых в колонке "Псевдонимы", используются внутри PostgreSQL по историческим причинам. В этот список не включены некоторые устаревшие типы и типы для внутреннего применения.
Таблица 8-1. Типы данных
| Имя | Псевдонимы | Описание |
|---|---|---|
| bigint | int8 | знаковое целое из 8 байт |
| bigserial | serial8 | восьмибайтное целое с автоувеличением |
| bit [ (n) ] | битовая строка фиксированной длины | |
| bit varying [ (n) ] | varbit | битовая строка переменной длины |
| boolean | bool | логическое значение (true/false) |
| box | прямоугольник в плоскости | |
| bytea | двоичные данные ("массив байт") | |
| character [ (n) ] | char [ (n) ] | символьная строка фиксированной длины |
| character varying [ (n) ] | varchar [ (n) ] | символьная строка переменной длины |
| cidr | сетевой адрес IPv4 или IPv6 | |
| circle | круг в плоскости | |
| date | календарная дата (год, месяц, день) | |
| double precision | float8 | число двойной точности с плавающей точкой (8 байт) |
| inet | адрес узла IPv4 или IPv6 | |
| integer | int, int4 | знаковое четырёхбайтное целое |
| interval [ поля ] [ (p) ] | интервал времени | |
| json | текстовые данные JSON | |
| jsonb | двоичные данные JSON, разобранные | |
| line | прямая в плоскости | |
| lseg | отрезок в плоскости | |
| macaddr | MAC-адрес | |
| money | денежная сумма | |
| numeric [ (p, s) ] | decimal [ (p, s) ] | вещественное число заданной точности |
| path | геометрический путь в плоскости | |
| pg_lsn | Последовательный номер в журнале PostgreSQL | |
| point | геометрическая точка в плоскости | |
| polygon | замкнутый геометрический путь в плоскости | |
| real | float4 | число одинарной точности с плавающей точкой (4 байта) |
| smallint | int2 | знаковое двухбайтное целое |
| smallserial | serial2 | двухбайтное целое с автоувеличением |
| serial | serial4 | четырёхбайтное целое с автоувеличением |
| text | символьная строка переменной длины | |
| time [ (p) ] [ without time zone ] | время суток (без часового пояса) | |
| time [ (p) ] with time zone | timetz | время суток с учётом часового пояса |
| timestamp [ (p) ] [ without time zone ] | дата и время (без часового пояса) | |
| timestamp [ (p) ] with time zone | timestamptz | дата и время с учётом часового пояса |
| 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, например геометрические пути, и есть типы, которые могут иметь разные форматы, например, дата и время. Некоторые функции ввода и вывода не являются в точности обратными друг к другу, то есть результат функции вывода может не совпадать со входным значением из-за потери точности.
| Пред. | Начало | След. |
| Запросы WITH (Общие табличные выражения) | Уровень выше | Числовые типы |
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.1.2. Arbitrary Precision Numbers
- 8.1.1. Integer Types
- 8.2. Monetary Types
- 8.3. Character Types
- 8.4. Binary Data Types
- 8.3. Character Types
- 8.4.1. bytea Hex Format
- 8.4.2. bytea Escape Format
- 8.4.1. bytea Hex 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.5.2. Date/Time Output
- 8.5.1. Date/Time Input
- 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.7.2. Ordering
- 8.7.1. Declaration of Enumerated Types
- 8.8. Geometric Types
- 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.2. cidr
- 8.9.1. inet
- 8.10. Bit String Types
- 8.11. Text Search Types
- 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.13.2. Encoding Handling
- 8.13.1. Creating XML Values
- 8.14. JSON Types
- 8.14.1. JSON Input and Output Syntax
- 8.14.2. Designing JSON documents effectively
- 8.14.3. jsonb Containment and Existence
- 8.14.4. jsonb Indexing
- 8.14.2. Designing JSON documents effectively
- 8.14.1. JSON Input and Output Syntax
- 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.15.2. Array Value Input
- 8.15.1. Declaration of Array Types
- 8.16. Composite Types
- 8.16.1. Declaration of Composite Types
- 8.16.2. Composite Value Input
- 8.16.3. Accessing Composite Types
- 8.16.4. Modifying Composite Types
- 8.16.5. Composite Type Input and Output Syntax
- 8.16.2. Composite Value Input
- 8.16.1. Declaration of Composite Types
- 8.17. Range Types
- 8.17.1. Built-in Range 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
- 8.17.7. Discrete Range Types
- 8.17.8. Defining New Range Types
- 8.17.9. Indexing
- 8.17.10. Constraints on Ranges
- 8.17.2. Examples
- 8.17.1. Built-in Range Types
- 8.18. Object Identifier Types
- 8.19. pg_lsn Type
- 8.20. Pseudo-Types
- 8.19. pg_lsn Type
PostgreSQL has a rich set of native data types available to users. Users can add new types to PostgreSQL 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 PostgreSQL for historical reasons. In addition, some internally used or deprecated types are available, but are not listed here.
Table 8-1. Data Types
| Name | Aliases | Description |
|---|---|---|
| bigint | int8 | signed eight-byte integer |
| bigserial | serial8 | autoincrementing eight-byte integer |
| bit [ (n) ] | fixed-length bit string | |
| bit varying [ (n) ] | varbit | variable-length bit string |
| boolean | bool | logical 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 precision | float8 | double precision floating-point number (8 bytes) |
| inet | IPv4 or IPv6 host address | |
| integer | int, int4 | signed 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 | |
| money | currency amount | |
| numeric [ (p, s) ] | decimal [ (p, s) ] | exact numeric of selectable precision |
| path | geometric path on a plane | |
| pg_lsn | PostgreSQL Log Sequence Number | |
| point | geometric point on a plane | |
| polygon | closed geometric path on a plane | |
| real | float4 | single precision floating-point number (4 bytes) |
| smallint | int2 | signed two-byte integer |
| smallserial | serial2 | autoincrementing two-byte integer |
| serial | serial4 | autoincrementing four-byte integer |
| text | variable-length character string | |
| time [ (p) ] [ without time zone ] | time of day (no time zone) | |
| time [ (p) ] with time zone | timetz | time of day, including time zone |
| timestamp [ (p) ] [ without time zone ] | date and time (no time zone) | |
| timestamp [ (p) ] with time zone | timestamptz | date and time, including time zone |
| tsquery | text search query | |
| tsvector | text search document | |
| txid_snapshot | user-level transaction ID 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 PostgreSQL, 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.