PostgreSQL Типове данни: байт, число, символ, двоичен
PostgreSQL предлага богат набор от собствени типове данни за потребителите. Потребителите могат да добавят нови типове с помощта на командата CREATE TYPE. Освен това прави заявките по-прости и по-четими.
Типове данни в PostgreSQL
PostgreSQL поддържа следните типове данни:
- Типове текст
- Числови типове
- Дати и времена
- XML
- JSON
- Булева
- Bits
- Двоични данни
- мрежа
- Масивите
- Създайте своя тип данни
- Булева
- временен
- UUID
- Array
- JSON
- Специални типове данни за съхраняване на мрежов адрес и геометрични данни.
Да учим PostgreSQL типове данни в детайли
Символни типове данни
PostgreSQL поддържа символни типове данни за съхраняване на текстови стойности. PostgreSQL изгражда символни типове данни от същите вътрешни структури. PostgreSQL предлага три символни типа данни: CHAR(n), VARCHAR(n) и TEXT.
| Име | Descriptйон |
|---|---|
| varchar(n) | Позволява ви да декларирате променлива дължина с ограничение |
| знак (n) | С фиксирана дължина, празно подплатено |
| Текст | Използвайте този тип данни, за да декларирате променлива с неограничена дължина |
Числови типове данни
PostgreSQL поддържа два различни типа числа:
- Числа
- Числа с плаваща запетая
| Име | Размер на магазина | Обхват |
|---|---|---|
| smallint | 2 байта | 32768 + 32767 |
| цяло число | 4 байта | 2147483648 + 2147483647 |
| bigint | 8 байта | -9223372036854775808 към 9223372036854775807 |
| десетичен | променлив | Ако сте го декларирали като десетичен тип данни варира от 131072 цифри преди десетичната запетая до 16383 цифри след десетичната запетая |
| цифров | променлив | Ако го декларирате като число, можете да включите число до 131072 цифри преди десетичната запетая до 16383 цифри след десетичната запетая |
| реален | 4 байта | 6 десетични цифри с точност |
| удвои | 8 байта | 15 десетични цифри с точност |
Двоични типове данни
Двоичният низ е поредица от октети или байтове. Двоичните типове данни на Postgres се разделят по два начина.
- Двоичните низове позволяват съхраняване на коефициенти с нулева стойност
- Непечатаеми октети
Символните низове не позволяват нулеви октети и също така забранява всякакви други октетни стойности и последователности, които са невалидни според правилата за кодиране на набора от знаци на базата данни.
| Име | Размер на съхранение | Descriptйон |
|---|---|---|
| Байт | 1 до 4 байта плюс размера на двоичния низ | Двоичен низ с променлива дължина |
Тип мрежов адрес
Много приложения съхраняват мрежова информация като IP адреси на потребители или сензори. PostgreSQL има три естествени типа, които ви помагат да оптимизирате мрежовите данни.
| Име | Размер | Descriptйон |
|---|---|---|
| сайдер | 7 или 19 байта | IPV4 и IPv6 мрежи |
| Inet | 7 или 19 байта | IPV4 и IPV5 хост и мрежи |
| macadr | 6 байта | MAC адреси |
Използването на типове мрежови адреси има следните предимства
- Спестяване на място за съхранение
- Проверка на входни грешки
- Функции като търсене на данни по подмрежа
Тип търсене на текст
PostgreSQL предоставя два типа данни, които са проектирани да поддържат пълнотекстово търсене. Пълнотекстовото търсене е търсене в колекция от документи на естествен език, за да търсите тези, които най-добре отговарят на заявка.
- Tsvector търсене на текст PostgreSQL типовете променливи представляват документ във форма, оптимизирана за търсене на текст
- Текстовото търсене на тип заявка съхранява ключовите думи, които трябва да бъдат търсени
Типове данни за дата/час
PostgreSQL timestamp предлага микросекунда точност вместо секунда точност. Освен това имате възможност да съхранявате с часова зона или без. PostgreSQL ще преобразува клеймо с часова зона в UTC при въвеждане и ще го съхрани.
Въвеждането на дата и час се приема в различни формати, включително традиционен Postgres, ISO 8601. SQL-съвместим и др.
PostgreSQL поддържа поръчка за ден / месец / година. Поддържаните формати са DMY, MDY, YMD
Времеви типове данни
| Име | Размер | Обхват | Резолюция |
|---|---|---|---|
| Времево клеймо без часова зона | 8 байта | 4713 г. пр. н. е. до 294276 XNUMX г. сл. н. е | 1 микросекунда/14 цифри |
| Времево клеймо с часова зона | 8 байта | 4713 г. пр. н. е. до 294276 XNUMX г. сл. н. е | 1 микросекунда/14 цифри |
| дата | 4 байта | 4713 г. пр. н. е. до 294276 XNUMX г. сл. н. е | Един ден |
| Време без часова зона | 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 цифри |
Примери
| Вход | Descriptйон |
|---|---|
| 2025-09-07 | ISO 8601, 7 септември с произволен стил на дата (препоръчителен формат) |
| Септември 7, 2025 | 7 септември с всеки стил на дата |
| 9/7/2025 | 7 септември с MDY, 9 юли с DMY |
| 9/7/25 | 7 септември 2025 г. с MDY |
| 2025-Sep-7 | 7 септември с всеки стил на дата |
| 7 септември-2018 | 7 септември с всеки стил на дата |
| 7-Sep-25 | 7 септември 2025 г. с YMD |
| 20250907 | ISO 8601,7 септември 20225 във всеки режим |
| 2025.250 | година и ден от годината, в този случай 7 септември 2025 г |
| J25250 | Юлианска среща |
Час/ Време с въвеждане на часова зона
| Вход | Descriptйон |
|---|---|
| 11:19:38.507 11:19:38 11:19 111938 |
ISO 8601 |
| 11: 19 AM | Същото като 11:19 |
| 11: 19 PM | същото като 23:19 |
| 23: 19-3 23: 19 03: 00 231900-03 |
ISO 8601, същото като в 11:19 EST |
| 23: 19 EST | часова зона, посочена като EST, същата като 11:19 EST |
Булев тип
Булев тип данни може да съдържа
- Вярно
- Фалшив
- нула
стойности.
Използвате a булев or булева ключова дума за деклариране на колона с булев тип данни.
Когато вмъквате стойности в булева колона, Postgre преобразува стойности като
- Да
- y
- 1
- t
- вярно
до 1 г.
Докато ценности като
- Не
- N
- 0
- F
- Фалшив
се преобразуват в 0
Докато избирате данни, стойностите отново се преобразуват обратно в да, вярно, у и т.н.
Геометрични типове данни
Геометричните типове данни представляват двумерни пространствени обекти. Те помагат при извършването на операции като ротации, мащабиране, превод и т.н.
| Име | Размер на съхранението | Представителство | Descriptйон |
|---|---|---|---|
| Точка | 16 байта | Точка на равнина | (x,y) |
| Линия | 32 байта | Безкрайна линия | ((xl.yl ).(x2.y2)) |
| Lseg | 32 байта | Краен сегмент | ((xl.yl ).(x2.y2)) |
| Box | 32 байта | Правоъгълен Box | ((xl.yl ).(x2.y2)) |
| Път | 16n + 16n байта | Затворен и отворен път | ((xl.yl),…) |
| Многоъгълник | 40 + 16n байта | Многоъгълник | [(xl.yl)….] |
| Кръг | 24 байта | Кръг | <(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 типа данни
- JSON
- 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 тип данни.
| Име | Descriptйон |
|---|---|
| който и да е | Функцията приема всички типове входни данни. |
| Масив | Функцията приема всеки тип масив от данни. |
| Всеки елемент | Функцията приема всеки тип данни. |
| Всяко изброяване | Функцията приема всеки тип данни enum. |
| Nonarray | Функцията приема всеки тип данни без масив. |
| Cstring | Функцията приема или връща C низ, завършващ с нула. |
| вътрешен | Вътрешна функция приема или връща вътрешен тип данни на сървъра. |
| Езиков_обработчик | Декларира се да връща езиков манипулатор. |
| Рекорд | Намерете функция, която връща неопределен тип ред. |
| Тригер | За връщане на тригер се използва тригерна функция. |
Важно е потребителят, който използва тази функция, да се увери, че функцията ще работи безопасно, когато псевдотип се използва като тип аргумент.
Най-добри практики при използване на типове данни
- Използвайте тип данни „текст“, освен ако не искате да ограничите въвеждането
- Никога не използвайте „char“.
- Целите числа използват "int." Използвайте bigint само когато имате наистина големи числа
- Използвайте „числово“ почти винаги
- Използвайте float in PostgreSQL ако имате източник на данни IEEE 754
Oбобщение
- PostgreSQL предлага богат набор от собствени типове данни за потребителите
- PostgreSQL поддържа символни типове данни за съхраняване на текстови стойности
- PostgreSQL поддържа два различни типа числа: 1. Цели числа, 2. Числа с плаваща запетая
- Двоичният низ е поредица от байтове или октети
- PostgreSQL има тип мрежов адрес, за да ви помогне да оптимизирате съхранението на мрежови данни
- Търсене на текст PostgreSQL структурите от данни са проектирани да поддържат пълнотекстово търсене
- Дата/час PSQL типовете данни позволяват информация за дата и час в различни формати
- Булевите типове полета на Postgres могат да съдържат три стойности 1. True 2. False 3. Null
- геометричен PostgreSQL типовете данни представляват двумерни пространствени обекти
- Изброени типове данни в PostgreSQL е полезно за представяне на рядко променяща се информация като код на държава или идентификатор на клон
- Universally Unique Identifies (UUID) е 128-битова величина, която се генерира от алгоритъм
- PostgreSQL има много записи със специално предназначение, които се наричат псевдотипове
- Най-добрата практика е да използвате тип данни „текст“, освен ако не искате да ограничите въвеждането
