В этой главе мы обсудим типы данных, используемые в PostgreSQL. При создании таблицы для каждого столбца вы указываете тип данных, т. Е. Какой тип данных вы хотите хранить в полях таблицы.
Это дает несколько преимуществ —
-
Согласованность. Операции со столбцами одного типа данных дают согласованные результаты и обычно являются самыми быстрыми.
-
Валидация — правильное использование типов данных подразумевает проверку формата данных и отклонение данных вне области действия типа данных.
-
Компактность — поскольку столбец может хранить значения одного типа, он хранится в компактном виде.
-
Производительность — правильное использование типов данных обеспечивает наиболее эффективное хранение данных. Сохраненные значения можно быстро обработать, что повышает производительность.
Согласованность. Операции со столбцами одного типа данных дают согласованные результаты и обычно являются самыми быстрыми.
Валидация — правильное использование типов данных подразумевает проверку формата данных и отклонение данных вне области действия типа данных.
Компактность — поскольку столбец может хранить значения одного типа, он хранится в компактном виде.
Производительность — правильное использование типов данных обеспечивает наиболее эффективное хранение данных. Сохраненные значения можно быстро обработать, что повышает производительность.
PostgreSQL поддерживает широкий набор типов данных. Кроме того, пользователи могут создавать свои собственные типы данных с помощью команды CREATE TYPE SQL. В PostgreSQL существуют разные категории типов данных. Они обсуждаются ниже.
Числовые Типы
Числовые типы состоят из двухбайтовых, четырехбайтовых и восьмибайтовых целых чисел, четырехбайтовых и восьмибайтовых чисел с плавающей запятой и десятичных дробей с выбираемой точностью. В следующей таблице перечислены доступные типы.
название | Размер хранилища | Описание | Спектр |
---|---|---|---|
SMALLINT | 2 байта | целое число малого диапазона | От -32768 до +32767 |
целое число | 4 байта | типичный выбор для целого числа | От -2147483648 до +2147483647 |
BIGINT | 8 байт | большое целое число | От -9223372036854775808 до 9223372036854775807 |
десятичный | переменная | указанная пользователем точность, точная | до 131072 цифр перед десятичной точкой; до 16383 знаков после запятой |
числовой | переменная | указанная пользователем точность, точная | до 131072 цифр перед десятичной точкой; до 16383 знаков после запятой |
реальный | 4 байта | переменная точность, неточная | Точность 6 десятичных цифр |
двойная точность | 8 байт | переменная точность, неточная | Точность 15 десятичных цифр |
smallserial | 2 байта | небольшое автоинкрементное целое число | От 1 до 32767 |
последовательный | 4 байта | автоинкрементное целое число | 1 до 2147483647 |
bigserial | 8 байт | большое автоинкрементное целое число | 1 до 9223372036854775807 |
Денежные Типы
Тип money хранит сумму в валюте с фиксированной дробной точностью. Значения типов данных numeric, int и bigint могут быть приведены к деньгам . Использование чисел с плавающей точкой не рекомендуется для обработки денег из-за возможной ошибки округления.
название | Размер хранилища | Описание | Спектр |
---|---|---|---|
Деньги | 8 байт | сумма в валюте | От -92233720368547758.08 до +92233720368547758.07 |
Типы персонажей
В приведенной ниже таблице перечислены типы символов общего назначения, доступные в PostgreSQL.
С. Нет. | Имя и описание |
---|---|
1 |
различные символы (n), varchar (n) переменная длина с ограничением |
2 |
символ (n), символ (n) фиксированная длина, с подкладкой |
3 |
текст переменная неограниченная длина |
различные символы (n), varchar (n)
переменная длина с ограничением
символ (n), символ (n)
фиксированная длина, с подкладкой
текст
переменная неограниченная длина
Двоичные типы данных
Тип данных bytea позволяет хранить двоичные строки, как показано в таблице ниже.
название | Размер хранилища | Описание |
---|---|---|
BYTEA | 1 или 4 байта плюс фактическая двоичная строка | двоичная строка переменной длины |
Типы даты / времени
PostgreSQL поддерживает полный набор типов даты и времени SQL, как показано в таблице ниже. Даты считаются по григорианскому календарю. Здесь все типы имеют разрешение 1 микросекунда / 14 цифр, кроме типа даты , разрешение которого — день .
название | Размер хранилища | Описание | Низкое значение | Высокое значение |
---|---|---|---|---|
отметка времени [(p)] [без часового пояса] | 8 байт | дата и время (без часового пояса) | 4713 г. до н.э. | 294276 н.э. |
TIMESTAMPTZ | 8 байт | дата и время с часовым поясом | 4713 г. до н.э. | 294276 н.э. |
Дата | 4 байта | дата (без времени суток) | 4713 г. до н.э. | 5874897 н.э. |
время [(p)] [без часового пояса] | 8 байт | время суток (без даты) | 00:00:00 | 24:00:00 |
время [(p)] с часовым поясом | 12 байт | только время суток, с часовым поясом | 00: 00: 00 + 1459 | 24: 00: 00-1459 |
интервал [поля] [(p)] | 12 байт | интервал времени | -178000000 лет | 178000000 лет |
Логический тип
PostgreSQL предоставляет стандартный тип SQL Boolean. Тип данных Boolean может иметь состояния true , false и третье состояние неизвестно , которое представлено нулевым значением SQL.
название | Размер хранилища | Описание |
---|---|---|
логический | 1 байт | состояние истинного или ложного |
Перечислимый тип
Перечислимые (enum) типы — это типы данных, которые содержат статический упорядоченный набор значений. Они эквивалентны типам enum, поддерживаемым во многих языках программирования.
В отличие от других типов, перечисляемые типы необходимо создавать с помощью команды CREATE TYPE. Этот тип используется для хранения статического упорядоченного набора значений. Например, направления по компасу, например, СЕВЕР, ЮГ, ВОСТОК и ЗАПАД или дни недели, как показано ниже —
CREATE TYPE week AS ENUM ('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');
Перечисленные, однажды созданные, могут использоваться как любые другие типы.
Геометрический тип
Геометрические типы данных представляют собой двумерные пространственные объекты. Самый фундаментальный тип, точка, формирует основу для всех других типов.
название | Размер хранилища | Представление | Описание |
---|---|---|---|
точка | 16 байт | Точка на плоскости | (Х, у) |
линия | 32 байта | Бесконечная линия (не полностью реализована) | ((X1, y1), (х2, у2)) |
LSEG | 32 байта | Конечный отрезок | ((X1, y1), (х2, у2)) |
коробка | 32 байта | Прямоугольная коробка | ((X1, y1), (х2, у2)) |
дорожка | 16 + 16n байт | Закрытый путь (похож на полигон) | ((X1, y1), …) |
дорожка | 16 + 16n байт | Открытый путь | [(X1, y1), …] |
многоугольник | 40 + 16n | Полигон (похож на замкнутый путь) | ((X1, y1), …) |
круг | 24 байта | Круг | <(x, y), r> (центральная точка и радиус) |
Тип сетевого адреса
PostgreSQL предлагает типы данных для хранения IPv4, IPv6 и MAC-адресов. Лучше использовать эти типы вместо обычных текстовых типов для хранения сетевых адресов, потому что эти типы предлагают проверку ошибок ввода и специализированные операторы и функции.
название | Размер хранилища | Описание |
---|---|---|
CIDR | 7 или 19 байт | Сети IPv4 и IPv6 |
инет | 7 или 19 байт | IPv4 и IPv6 хосты и сети |
MacAddr | 6 байт | MAC-адреса |
Тип битовой строки
Типы битовых строк используются для хранения битовых масок. Это либо 0, либо 1. Существует два типа битов SQL: bit (n) и bitinging (n) , где n — положительное целое число.
Тип текстового поиска
Этот тип поддерживает полнотекстовый поиск, который представляет собой поиск в наборе документов на естественном языке для поиска документов, которые лучше всего соответствуют запросу. Для этого есть два типа данных:
С. Нет. | Имя и описание |
---|---|
1 |
поисковый вектор Это отсортированный список отдельных слов, которые были нормализованы для объединения различных вариантов одного и того же слова, называемые «лексемы». |
2 |
tsquery Это хранит лексемы, которые нужно искать, и объединяет их, соблюдая логические операторы & (AND), | (Или) и! (НЕ). Круглые скобки могут быть использованы для принудительной группировки операторов. |
поисковый вектор
Это отсортированный список отдельных слов, которые были нормализованы для объединения различных вариантов одного и того же слова, называемые «лексемы».
tsquery
Это хранит лексемы, которые нужно искать, и объединяет их, соблюдая логические операторы & (AND), | (Или) и! (НЕ). Круглые скобки могут быть использованы для принудительной группировки операторов.
Тип UUID
UUID (универсальные уникальные идентификаторы) записывается в виде последовательности шестнадцатеричных цифр в нижнем регистре, в нескольких группах, разделенных дефисами, в частности, в группе из восьми цифр, за которой следуют три группы из четырех цифр, за которыми следует группа из 12 цифр, для всего 32 цифры, представляющие 128 бит.
Пример UUID — 550e8400-e29b-41d4-a716-446655440000
Тип XML
Тип данных XML может использоваться для хранения данных XML. Для хранения данных XML сначала необходимо создать значения XML с помощью функции xmlparse следующим образом:
XMLPARSE (DOCUMENT '<?xml version="1.0"?> <tutorial> <title>PostgreSQL Tutorial </title> <topics>...</topics> </tutorial>') XMLPARSE (CONTENT 'xyz<foo>bar</foo><bar>foo</bar>')
Тип JSON
Тип данных json может использоваться для хранения данных JSON (JavaScript Object Notation). Такие данные также могут быть сохранены в виде текста , но у типа данных json есть преимущество проверки того, что каждое сохраненное значение является допустимым значением JSON. Также доступны связанные вспомогательные функции, которые можно использовать непосредственно для обработки типа данных JSON следующим образом.
пример | Пример результата |
---|---|
array_to_json ( ‘{{1,5}, {99100}}’ :: Int []) | [[1,5], [99100]] |
row_to_json (строка (1, ‘Foo’)) | { «F1»: 1, «F2»: «Foo»} |
Тип массива
PostgreSQL дает возможность определять столбец таблицы как многомерный массив переменной длины. Могут быть созданы массивы любого встроенного или определенного пользователем базового типа, типа enum или составного типа.
Декларация массивов
Тип массива может быть объявлен как
CREATE TABLE monthly_savings ( name text, saving_per_quarter integer[], scheme text[][] );
или используя ключевое слово «ARRAY» как
CREATE TABLE monthly_savings ( name text, saving_per_quarter integer ARRAY[4], scheme text[][] );
Вставка значений
Значения массива могут быть вставлены в виде литеральной константы, заключая значения элементов в фигурные скобки и разделяя их запятыми. Пример показан ниже —
INSERT INTO monthly_savings VALUES (‘Manisha’, ‘{20000, 14600, 23500, 13250}’, ‘{{“FD”, “MF”}, {“FD”, “Property”}}’);
Доступ к массивам
Пример доступа к массивам приведен ниже. Приведенная ниже команда выберет людей, чьи сбережения больше во втором квартале, чем в четвертом квартале.
SELECT name FROM monhly_savings WHERE saving_per_quarter[2] > saving_per_quarter[4];
Модификация массивов
Пример изменения массивов приведен ниже.
UPDATE monthly_savings SET saving_per_quarter = '{25000,25000,27000,27000}' WHERE name = 'Manisha';
или используя синтаксис выражения ARRAY —
UPDATE monthly_savings SET saving_per_quarter = ARRAY[25000,25000,27000,27000] WHERE name = 'Manisha';
Поиск массивов
Пример поиска в массивах приведен ниже.
SELECT * FROM monthly_savings WHERE saving_per_quarter[1] = 10000 OR saving_per_quarter[2] = 10000 OR saving_per_quarter[3] = 10000 OR saving_per_quarter[4] = 10000;
Если размер массива известен, можно использовать метод поиска, указанный выше. Иначе, следующий пример показывает, как искать, когда размер неизвестен.
SELECT * FROM monthly_savings WHERE 10000 = ANY (saving_per_quarter);
Композитные типы
Этот тип представляет список имен полей и их типов данных, т. Е. Структуру строки или записи таблицы.
Декларация составных типов
В следующем примере показано, как объявить составной тип
CREATE TYPE inventory_item AS ( name text, supplier_id integer, price numeric );
Этот тип данных может использоваться в таблицах создания, как показано ниже:
CREATE TABLE on_hand ( item inventory_item, count integer );
Ввод композитного значения
Составные значения могут быть вставлены в виде литеральной константы, заключая значения полей в круглые скобки и разделяя их запятыми. Пример показан ниже —
INSERT INTO on_hand VALUES (ROW('fuzzy dice', 42, 1.99), 1000);
Это действительно для описанного выше инвентаризационного элемента. Ключевое слово ROW на самом деле является необязательным, если у вас есть более одного поля в выражении.
Доступ к составным типам
Чтобы получить доступ к полю составного столбца, используйте точку, за которой следует имя поля, подобно выбору поля из имени таблицы. Например, чтобы выбрать некоторые подполя из нашей таблицы примеров on_hand, запрос будет выглядеть так, как показано ниже —
SELECT (item).name FROM on_hand WHERE (item).price > 9.99;
Вы даже можете использовать имя таблицы (например, в многопользовательском запросе), например так:
SELECT (on_hand.item).name FROM on_hand WHERE (on_hand.item).price > 9.99;
Типы диапазонов
Типы диапазона представляют собой типы данных, которые используют диапазон данных. Типом диапазона могут быть дискретные диапазоны (например, все целочисленные значения от 1 до 10) или непрерывные диапазоны (например, любой момент времени между 10:00 и 11:00).
Доступные встроенные типы диапазонов включают следующие диапазоны —
-
int4range — диапазон целого числа
-
int8range — диапазон от bigint
-
numrange — диапазон числовых значений
-
tsrange — диапазон меток времени без часового пояса
-
tstzrange — диапазон меток времени с часовым поясом
-
диапазон дат — диапазон дат
int4range — диапазон целого числа
int8range — диапазон от bigint
numrange — диапазон числовых значений
tsrange — диапазон меток времени без часового пояса
tstzrange — диапазон меток времени с часовым поясом
диапазон дат — диапазон дат
Пользовательские типы диапазонов могут быть созданы, чтобы сделать доступными новые типы диапазонов, такие как диапазоны IP-адресов, использующие тип inet в качестве базы, или диапазоны с плавающей точкой, использующие тип данных float в качестве базы.
Типы диапазонов поддерживают включающие и исключающие границы диапазона, используя символы [] и () соответственно. Например, «[4,9)» представляет все целые числа, начиная с 4 и включая до 9, но не включая 9.
Типы идентификаторов объектов
Идентификаторы объектов (OID) используются внутри PostgreSQL в качестве первичных ключей для различных системных таблиц. Если указано WITH OIDS или включена переменная конфигурации default_with_oids , только тогда в таких случаях OID добавляются в созданные пользователем таблицы. В следующей таблице перечислены несколько типов псевдонимов. Типы псевдонимов OID не имеют собственных операций, за исключением специализированных подпрограмм ввода и вывода.
название | Рекомендации | Описание | Пример значения |
---|---|---|---|
подъязычная | любой | числовой идентификатор объекта | 564182 |
regproc | pg_proc | имя функции | сумма |
regprocedure | pg_proc | функция с типами аргументов | сумма (int4) |
regoper | pg_operator | имя оператора | + |
regoperator | pg_operator | оператор с типами аргументов | * (целое число, целое число) или — (НЕТ, целое число) |
regclass | pg_class | имя отношения | pg_type |
regtype | pg_type | имя типа данных | целое число |
regconfig | pg_ts_config | конфигурация текстового поиска | английский |
regdictionary | pg_ts_dict | словарь текстового поиска | просто |
Псевдо-типы
Система типов PostgreSQL содержит ряд записей специального назначения, которые в совокупности называются псевдотипами. Псевдотип нельзя использовать в качестве типа данных столбца, но его можно использовать для объявления аргумента функции или типа результата.
В приведенной ниже таблице перечислены существующие псевдотипы.
любой
Указывает, что функция принимает любой тип входных данных.
anyelement
Указывает, что функция принимает любой тип данных.
anyarray
Указывает, что функция принимает любой тип данных массива.
anynonarray
Указывает, что функция принимает любой тип данных, отличный от массива.
anyenum
Указывает, что функция принимает любой тип данных enum.
anyrange
Указывает, что функция принимает любой тип данных диапазона.
CString
Указывает, что функция принимает или возвращает строку C с нулевым символом в конце.
внутренний
Указывает, что функция принимает или возвращает внутренний тип данных сервера.
language_handler
Обработчик вызова процедурного языка объявляется как возвращающий language_handler.
fdw_handler
Обработчик обёртки сторонних данных объявляется как возвращающий fdw_handler.
запись
Определяет функцию, возвращающую неопределенный тип строки.
спусковой крючок
Объявлена триггерная функция для возврата триггера.
недействительным
Указывает, что функция не возвращает значения.