Типы данных PostgreSQL: байтовые, числовые, символьные, двоичные.

PostgreSQL предлагает пользователям богатый набор собственных типов данных. Пользователи могут добавлять новые типы с помощью команды CREATE TYPE. Это также делает запросы более простыми и читабельными.

Типы данных в PostgreSQL

PostgreSQL поддерживает следующееwing типы данных:

  • Типы текста
  • Числовые типы
  • Даты и время
  • XML
  • JSON
  • Логический
  • Биты
  • Binary Data
  • Cеть
  • Массивы
  • Создайте свой тип данных
  • Логический
  • Временной
  • UUID
  • массив
  • JSON
  • Специальные типы данных для хранения сетевого адреса и геометрических данных.

Давайте подробно изучим типы данных PostgreSQL.

Типы данных символов

PostgreSQL поддерживает символьные типы данных для хранения текстовых значений. PostgreSQL строит символьные типы данных на основе одних и тех же внутренних структур. PostgreSQL предлагает три символьных типа данных: CHAR(n), VARCHAR(n) и TEXT.

Фамилия Описание
varchar (сущ.) Позволяет объявить переменную длину с ограничением
Чар(н) Фиксированной длины, с глухой подкладкой
Текст Используйте этот тип данных, чтобы объявить переменную неограниченной длины.

Числовые типы данных

PostgreSQL поддерживает два различных типа чисел:

  • Целые
  • Числа с плавающей точкой
Фамилия Размер магазина Диапазон
SMALLINT 2 байт -32768 до + 32767
целое 4 байт -2147483648 до + 2147483647
BIGINT 8 байт -9223372036854775808 в 9223372036854775807
десятичная дробь переменная Если вы объявили его как десятичный тип данных, он варьируется от 131072 цифр до десятичной точки до 16383 цифр после десятичной точки.
числовой переменная Если вы объявите его как число, вы можете включить число до 131072 цифр до десятичной точки и до 16383 цифр после десятичной точки.
реальные 4 байт точность до 6 десятичных знаков
double 8 байт точность до 15 десятичных знаков

Типы двоичных данных

Бинарная строка представляет собой последовательность октетов или байтов. Двоичные типы данных Postgres делятся двумя способами.

  • Двоичные строки позволяют хранить шансы нулевого значения.
  • Непечатаемые октеты

Строки символов не допускают нулевых октетов, а также запрещают любые другие значения октетов и последовательности, которые недопустимы в соответствии с правилами кодирования набора символов базы данных.

Фамилия Размер хранилища Описание
Байт От 1 до 4 байт плюс размер двоичной строки Двоичная строка переменной длины

Тип сетевого адреса

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

Фамилия Размер Описание
сидр 7 или 19 байт ИПВ4 и IPv6 сетей
инет 7 или 19 байт Хост и сети IPV4 и IPV5
Macaddr 6 байт MAC-адреса

Использование типов сетевых адресов имеет следующиеwing Преимущества

  1. Экономия места для хранения
  2. Проверка ошибок ввода
  3. Такие функции, как searching данных по подсети

Тип текстового поиска

PostgreSQL предоставляет два типа данных, предназначенных для поддержки полнотекстового поиска. Полнотекстовый поиск включенarchiПросматривайте коллекцию документов на естественном языке для поиска тех, которые лучше всего соответствуют запросу.

  • Типы переменных Tsvector text search PostgreSQL представляют документ в форме, оптимизированной для текстового поиска.
  • Текстовый поиск типа запроса хранит ключевые слова, которые необходимо найти.

Типы данных даты/времени

Временная метка PostgreSQL обеспечивает точность до микросекунд вместо секунды. Кроме того, у вас также есть возможность сохранять данные с часовым поясом или без него. PostgreSQL преобразует временную метку с часовым поясом в UTC при входе и сохраняет ее.

Ввод даты и времени принимается в различных форматах, включая традиционный Postgres, ISO 8601. SQL-совместимый и т. д.

PostgreSQL поддерживает упорядочивание день/месяц/год. Поддерживаемые форматы: DMY, MDY, YMD.

Временные типы данных

Фамилия Размер Диапазон Постановления
Временная метка без часового пояса 8 байт 4713 г. до н.э. - 294276 г. н.э. 1 микросекунда/14 цифр
Временная метка с часовым поясом 8 байт 4713 г. до н.э. - 294276 г. н.э. 1 микросекунда/14 цифр
даты 4 байт 4713 г. до н.э. - 294276 г. н.э. Один день
Время без часового пояса 8 байт 00:00:00 to 24:00:00 1 микросекунда/14 цифр
Время с часовым поясом 12 байт с 00:00:00 + 1459 до 24:00:00-1459 1 микросекунда/14 цифр
Интервал 12 байт -178000000 до 178000000 лет 1 микросекунда/14 цифр

Примеры

вход Описание
2025-09-07 ISO 8601, 7 сентября с любым стилем даты (рекомендуемый формат)
7 сентября, 2025 7 сентября в любом стиле даты
9/7/2025 7 сентября с MDY, 9 июля с DMY.
9/7/25 7 сентября 2025 г., с MDY
2025-Сен-7 7 сентября в любом стиле даты
Сен-7-2018 7 сентября в любом стиле даты
7-Сен-25 7 сентября 2025 г., с YMD
20250907 ISO 8601,7, 20225 сентября XNUMX г. в любом режиме
2025.250 год и день года, в данном случае 7 сентября 2025 г.
J25250 Юлианская дата

Время/время с вводом часового пояса

вход Описание
11:19:38.507
11:19:38
11:19
111938
ISO 8601
11: 19 А.М. То же, что и 11:19
11: 19 PM то же, что 23:19
23: 19-3
23: 19-03: 00
231900-03
ISO 8601, то же, что и в 11:19 по восточному стандартному времени.
23:19 вечера EST часовой пояс указан как EST, такой же, как 11:19 EST

Логический тип

Логический тип данных может содержать

  • Правда
  • Ложь
  • нуль

значения.

Вы используете BOOL or логический Ключевое слово для объявления столбца с логическим типом данных.

Когда вы вставляете значения в логический столбец, Postgre преобразует значения типа

  • Да
  • y
  • 1
  • t
  • правда

в 1.

Хотя такие ценности, как

  • Нет
  • N
  • 0
  • F
  • Ложь

конвертируются в 0

При выборе данных значения снова преобразуются обратно в «да», «истина», «y» и т. д.

Геометрические типы данных

Геометрические типы данных представляют собой двумерные пространственные объекты. Они помогают выполнять такие операции, как вращение, масштабирование, перевод и т. д.

Фамилия Размер хранилища Представление Описание
Точка 16 байт Точка на плоскости (Х, у)
линия 32 байт Бесконечная линия ((xl.yl ).(x2.y2))
Лсег 32 байт Конечный отрезок ((xl.yl ).(x2.y2))
Box 32 байт прямоугольный Box ((xl.yl ).(x2.y2))
Path 16n + 16n байт Закрыть и открыть путь ((xl.yl),…)
Polygon 40 + 16n байт Polygon [(xl.yl)….]
Circle 24 байт Circle <(xy).r> (центральная точка и радиус)

Перечисленные типы

Перечислимый тип данных PostgreSQL полезен для представления редко меняющейся информации, такой как код страны или идентификатор филиала. Тип данных Enumerated представлен в таблице с внешними ключами для обеспечения целостности данных.

Пример

Цвет волос довольно статичен в демографической базе данных.

CREATE TYPE hair_color AS ENUM
('brown','black','red','grey','blond')

Перечисленные типы

Тип диапазона

Многие бизнес-приложения требуют данных в диапазонах. Обычно для работы с диапазонами определяются два столбца (например: дата начала и дата окончания). Это неэффективно и сложно поддерживать.

Postgre построил типы диапазонов следующим образом:

  • int4range — Отображение диапазона целых чисел
  • int8range — Отображение диапазона bigint
  • numrange — Показывает числовой диапазон
  • tstrange — Помогает отображать временную метку без часового пояса.
  • странный — позволяет отображать временную метку с часовым поясом.
  • диапазон дат — Диапазон дат

UUID-тип

Универсально уникальные идентификаторы (UUID) — это 128-битная величина, генерируемая алгоритмом. Очень маловероятно, что тот же идентификатор будет сгенерирован другим человеком в мире с использованием того же алгоритма. Вот почему для распределенных систем эти идентификаторы являются идеальным выбором, поскольку они обеспечивают уникальность в пределах одной базы данных. UUID записывается как группа шестнадцатеричных цифр в нижнем регистре, различные группы которых разделены дефисами.

PostgreSQL имеет собственный тип данных UUID, который занимает 16 байт памяти. UUID — идеальный тип данных для первичных ключей.

Пример

d5f28c97-b962-43be-9cf8-ca1632182e8e

Postgre также принимает альтернативные формы ввода UUID, например, все заглавные буквы, без дефисов, фигурных скобок и т. д.

XML-тип

PostgreSQL позволяет хранить данные XML в типе данных, но это не что иное, как расширение текстового типа данных. Но преимущество в том, что он проверяет правильность формата входного XML.

Пример

XMLPARSE (DOCUMENT '<?xml version="1.0"?><tutorial><chapter>Data Type</chapter><chapter>...</chapter></tutorial>')

Тип JSON

Для хранения данных JSON PostgreSQL предлагает 2 типа данных.

  1. JSON
  2. JSONB
JSON Jsonb
Простое расширение текстового типа данных с проверкой JSON. Двоичное представление данных JSON.
Вставка выполняется быстро, но извлечение данных происходит относительно медленно. Вставка выполняется медленно, но выбор (извлечение данных происходит быстро)
Сохраняет введенные данные точно так, как они есть, включая пробелы. Поддерживает индексацию. Может оптимизировать пробелы, чтобы ускорить поиск.
Повторная обработка при получении данных Не требуется повторная обработка при извлечении данных

Наиболее широко используемый тип данных JSON использует jsonb, если только нет какой-либо особой необходимости использовать тип данных JSON.

Пример

CREATE TABLE employee (
  id integer NOT NULL,
  age  integer NOT NULL,
  data jsonb
);

INSERT INTO employee VALUES (1, 35, '{"name": "Tom Price", "tags": ["Motivated", "SelfLearner"], "onboareded": true}'); 

Псевдо-типы

PostgreSQL имеет множество записей специального назначения, которые называются псевдотипами. Вы не можете использовать псевдотипы в качестве типов столбцов PostgreSQL. Они используются для объявления аргумента функции или типа возвращаемого значения.

Каждый из доступных псевдотипов полезен в ситуациях, когда документация о поведении функции не соответствует простому принятию или возврату значения определенного значения. Тип данных SQL.

Фамилия Описание
Любые Функция принимает все типы входных данных.
Массив Функция принимает любой тип данных массива.
Любой элемент Функция принимает любой тип данных.
Любое перечисление Функция принимает любой тип данных перечисления.
Без массива Функция принимает любой тип данных, не являющийся массивом.
Cстрока Функция принимает или возвращает строку C с нулевым завершением.
внутренний Внутренняя функция принимает или возвращает внутренний тип данных сервера.
Language_handler Объявлено, что он возвращает обработчик языка.
Запись Найдите функцию, которая возвращает неопределенный тип строки.
Вызывать Функция триггера используется для возврата триггера.

Важно, чтобы пользователь, использующий эту функцию, был уверен, что функция будет вести себя безопасно, когда псевдотип используется в качестве типа аргумента.

Лучшие практики использования типов данных

  • Используйте тип данных «текст», если вы не хотите ограничить ввод.
  • Никогда не используйте «char».
  • Целые числа используют «int». Используйте bigint только тогда, когда у вас действительно большие числа.
  • Используйте «числовой» почти всегда
  • Используйте float в PostgreSQL, если у вас есть источник данных IEEE 754.

Выводы

  • PostgreSQL предлагает пользователям богатый набор собственных типов данных.
  • PostgreSQL поддерживает символьные типы данных для хранения текстовых значений.
  • PostgreSQL поддерживает два различных типа чисел: 1. Целые числа, 2. Числа с плавающей запятой.
  • Бинарная строка — это последовательность байтов или октетов.
  • PostgreSQL имеет тип сетевого адреса, который поможет вам оптимизировать хранение сетевых данных.
  • Текстовый поиск Структуры данных PostgreSQL предназначены для поддержки полнотекстового поиска.
  • Типы данных даты/времени PSQL позволяют получать информацию о дате и времени в различных форматах.
  • Логические типы полей Postgres могут содержать три значения: 1. True 2. False 3. Null
  • Геометрические типы данных PostgreSQL представляют двумерные пространственные объекты.
  • Перечислимые типы данных в PostgreSQL полезны для представления редко меняющейся информации, такой как код страны или идентификатор филиала.
  • Универсально уникальные идентификаторы (UUID) — это 128-битная величина, генерируемая алгоритмом.
  • PostgreSQL имеет множество записей специального назначения, которые называются псевдотипами.
  • Лучше всего использовать тип данных «текст», если вы не хотите ограничить ввод.