PostgreSQL Typy dat: Byte, Číselné, Znakové, Binární
PostgreSQL nabízí uživatelům bohatou sadu nativních datových typů. Uživatelé mohou přidávat nové typy pomocí příkazu CREATE TYPE. Díky tomu jsou dotazy jednodušší a čitelnější.
Typy dat v PostgreSQL
PostgreSQL podporuje následující datové typy:
- Typy textu
- Číselné typy
- Data a časy
- XML
- JSON
- Boolean
- Bity
- Binární data
- Síť
- Pole
- Vytvořte svůj datový typ
- Boolean
- Dočasný
- UUID
- Řada
- JSON
- Speciální datové typy pro uložení síťové adresy a geometrických dat.
Pojďme se učit PostgreSQL datové typy podrobně
Datové typy znaků
PostgreSQL podporuje datové typy znaků pro ukládání textových hodnot. PostgreSQL vytváří datové typy znaků ze stejných vnitřních struktur. PostgreSQL nabízí tři znakové datové typy: CHAR(n), VARCHAR(n) a TEXT.
Jméno | Description |
---|---|
varchar(n) | Umožňuje deklarovat proměnnou délku s limitem |
Char(n) | Pevná délka, prázdné polstrování |
Text | Use může tento datový typ použít k deklaraci proměnné s neomezenou délkou |
Číselné datové typy
PostgreSQL podporuje dva různé typy čísel:
- Celé číslo
- Čísla s plovoucí desetinnou čárkou
Jméno | Velikost obchodu | Rozsah |
---|---|---|
smallint | 2 bytů | -32768 až + 32767 |
celé číslo | 4 bytů | -2147483648 až + 2147483647 |
bigint | 8 bytů | -9223372036854775808 na 9223372036854775807 |
desetinný | proměnlivý | Pokud jste jej deklarovali jako desetinný datový typ, rozsahy od 131072 číslic před desetinnou čárkou do 16383 číslic za desetinnou čárkou |
numeric | proměnlivý | Pokud to deklarujete jako číslo, můžete před desetinnou čárkou vložit číslo o délce až 131072 číslic až po 16383 číslic za desetinnou čárkou |
skutečný | 4 bytů | Přesnost na 6 desetinných míst |
zdvojnásobit | 8 bytů | Přesnost na 15 desetinných míst |
Binární datové typy
Binární řetězec je posloupnost oktetů nebo bajtů. Binární datové typy Postgres jsou rozděleny dvěma způsoby.
- Binární řetězce umožňují uložení pravděpodobnosti hodnoty nula
- Netisknutelné oktety
Znakové řetězce nepovolují nulové oktety a také zakazují jakékoli jiné hodnoty oktetu a sekvence, které jsou neplatné podle pravidel kódování znakové sady v databázi.
Jméno | Velikost úložiště | Description |
---|---|---|
Byte | 1 až 4 bajty plus velikost binárního řetězce | Binární řetězec s proměnnou délkou |
Typ síťové adresy
Mnoho aplikací ukládá síťové informace, jako jsou IP adresy uživatelů nebo senzorů. PostgreSQL má tři nativní typy, které vám pomohou optimalizovat síťová data.
Jméno | Velikost | Description |
---|---|---|
jablečný mošt | 7 nebo 19 bajty | IPv4 a IPv6 sítě |
Inet | 7 nebo 19 bajty | Hostitel a sítě IPV4 a IPV5 |
macaddr | 6 bytů | MAC adresy |
Použití typů síťových adres má následující výhody
- Úspora úložného prostoru
- Kontrola chyb vstupu
- Funkce jako vyhledávání dat podle podsítě
Typ vyhledávání textu
PostgreSQL poskytuje dva datové typy, které jsou navrženy pro podporu fulltextového vyhledávání. Fulltextové vyhledávání je prohledávání kolekce dokumentů v přirozeném jazyce za účelem hledání těch, které nejlépe odpovídají dotazu.
- Tsvector textové vyhledávání PostgreSQL typy proměnných představují dokument ve formě optimalizované pro textové vyhledávání
- Textové vyhledávání typu dotazu ukládá klíčová slova, která je třeba hledat
Datové typy data/času
PostgreSQL časové razítko nabízí mikrosekundovou přesnost místo sekundové přesnosti. Navíc máte také možnost ukládání s časovým pásmem nebo bez. PostgreSQL převede časové razítko s časovou zónou na UTC na vstupu a uloží jej.
Zadávání data a času je přijímáno v různých formátech, včetně tradičních Postgres, ISO 8601. SQL-kompatibilní atd.
PostgreSQL podporuje objednávání den / měsíc / rok. Podporované formáty jsou DMY, MDY, YMD
Časové datové typy
Jméno | Velikost | Rozsah | Rozlišení |
---|---|---|---|
Časové razítko bez časového pásma | 8 bytů | 4713 př.nl až 294276 našeho letopočtu | 1mikrosekunda/14 číslic |
Časové razítko s časovým pásmem | 8 bytů | 4713 př.nl až 294276 našeho letopočtu | 1mikrosekunda/14 číslic |
datum | 4 bytů | 4713 př.nl až 294276 našeho letopočtu | Jednoho dne |
Čas bez časového pásma | 8 bytů | 00:00:00 to 24:00:00 | 1mikrosekunda/14 číslic |
Čas s časovou zónou | 12 bytů | 00:00:00 + 1459 až 24:00:00-1459 | 1mikrosekunda/14 číslic |
Interval | 12 bytů | -178000000 až 178000000 let | 1mikrosekunda/14 číslic |
Příklady
Vstup | Description |
---|---|
2025-09-07 | ISO 8601, 7. září s libovolným stylem data (doporučený formát) |
Září 7, 2025 | 7. září s jakýmkoliv datem |
9/7/2025 | 7. září s MDY, 9. července s DMY |
9/7/25 | 7. září 2025, s MDY |
2025-Sep-7 | 7. září s jakýmkoliv datem |
7. září 2018 | 7. září s jakýmkoliv datem |
7-Sep-25 | 7. září 2025 s YMD |
20250907 | ISO 8601,7 září 20225 v jakémkoli režimu |
2025.250 | rok a den v roce, v tomto případě 7. září 2025 |
J25250 | Julian datum |
Čas/čas se vstupem časového pásma
Vstup | Description |
---|---|
11:19:38.507 11:19:38 11:19 111938 |
ISO 8601 |
11: 19 AM | Stejně jako v 11:19 |
11: 19 PM | stejně jako 23:19 |
23: 19 3, 23: 19 03-: 00 231900-03 |
ISO 8601, stejně jako ve 11:19 EST |
23: 19 EST | časové pásmo určené jako EST, stejné jako ve 11:19 EST |
Booleovský typ
Booleovský datový typ může obsahovat
- Pravdivý
- Falešný
- null
hodnoty.
Používáte a bool or boolean klíčové slovo pro deklaraci sloupce s datovým typem Boolean.
Když vložíte hodnoty do booleovského sloupce, Postgre převede hodnoty jako
- Ano
- y
- 1
- t
- pravdivý
do roku 1.
Zatímco hodnoty jako
- Ne
- N
- 0
- F
- Falešný
jsou převedeny na 0
Při výběru dat se hodnoty opět převedou zpět na yes, true, y atd.
Geometrické datové typy
Geometrické datové typy představují dvourozměrné prostorové objekty. Pomáhají provádět operace, jako je rotace, změna měřítka, posun atd.
Jméno | Velikost úložiště | Reprezentace | Description |
---|---|---|---|
Bod | 16 bytů | Bod na rovině | (x,y) |
Linka | 32 bytů | Nekonečná čára | ((xl.yl ).(x2.y2)) |
Lseg | 32 bytů | Konečný úsečka | ((xl.yl ).(x2.y2)) |
Box | 32 bytů | Obdélníkový Box | ((xl.yl ).(x2.y2)) |
Cesta | 16n + 16n bajtů | Zavřít a otevřít cestu | ((xl.yl),…) |
Polygon | 40 + 16n bajtů | Polygon | [(xl.yl)….] |
Kruh | 24 bytů | Kruh | <(xy).r> (střed a poloměr) |
Vyjmenované typy
Výčet PostgreSQL datový typ je užitečný pro reprezentaci zřídka se měnících informací, jako je kód země nebo ID pobočky. Datový typ Enumerated je reprezentován v tabulce s cizími klíči, aby byla zajištěna integrita dat.
Příklad
Barva vlasů je v demografické databázi poměrně statická
CREATE TYPE hair_color AS ENUM ('brown','black','red','grey','blond')
Typ rozsahu
Mnoho podnikových aplikací vyžaduje data v rozsazích. Obvykle jsou pro rozsahy definovány dva sloupce (příklad: počáteční datum, koncové datum). To je jak neefektivní, tak i náročné na údržbu.
Postgre sestavil typy rozsahů následovně
- int4range — Zobrazení rozsahu celého čísla
- int8range — Zobrazení rozsahu bigint
- číselný rozsah — Zobrazuje číselný rozsah
- tstrange — Pomáhá zobrazit časové razítko bez časového pásma
- podivné — Umožňuje zobrazit časové razítko s časovým pásmem
- rozsah dat — Rozsah data
Typ UUID
Universally Unique Identities (UUID) je 128bitová veličina, která je generována algoritmem. Je velmi nepravděpodobné, že stejný identifikátor vygeneruje jiná osoba na světě pomocí stejného algoritmu. Proto jsou pro distribuované systémy tyto identifikátory ideální volbou, protože nabízejí jedinečnost v rámci jedné databáze. UUID se zapisuje jako skupina malých hexadecimálních číslic s různými skupinami oddělenými pomlčkami.
PostgreSQL má nativní datový typ UUID, který spotřebuje 16 bajtů úložiště. UUID je ideální datový typ pro primární klíče.
Příklad
d5f28c97-b962-43be-9cf8-ca1632182e8e
Postgre také přijímá alternativní formy vstupů UUID, jako jsou všechna velká písmena, žádné pomlčky, složené závorky atd.
Typ XML
PostgreSQL umožňuje ukládat XML data v datovém typu, ale nejde o nic jiného než o rozšíření textového datového typu. Výhodou ale je, že kontroluje, zda je vstupní XML správně naformátováno.
Příklad
XMLPARSE (DOCUMENT '<?xml version="1.0"?><tutorial><chapter>Data Type</chapter><chapter>...</chapter></tutorial>')
Typ JSON
K ukládání dat JSON PostgreSQL nabízí 2 datové typy
- JSON
- JSONB
json | Jsonb |
---|---|
Jednoduché rozšíření textového datového typu s ověřením JSON | Binární reprezentace dat JSON |
Vkládání je rychlé, ale načítání dat je relativně pomalé. | Vkládání je pomalé, ale vyberte (načítání dat je rychlé) |
Ukládá zadaná data přesně tak, jak jsou, včetně mezer. | Podporuje indexování. Může optimalizovat mezery, aby bylo načítání rychlejší. |
Přepracování při získávání dat | Při získávání dat není vyžadováno opětovné zpracování |
Nejpoužívanější datový typ JSON používal nás jsonb, pokud neexistuje nějaká specializovaná potřeba použít datový typ JSON.
Příklad
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}');
Pseudotypy
PostgreSQL má mnoho položek pro speciální účely, které se nazývají pseudotypy. Nemůžete používat pseudotypy jako PostgreSQL typy sloupců. Používají se k deklaraci nebo funkci argumentu nebo návratového typu.
Každý z dostupných pseudotypů je užitečný v situacích, kdy dokumenty chování funkce neodpovídají pouhému převzetí nebo vrácení hodnoty konkrétního datový typ SQL.
Jméno | Description |
---|---|
Žádný | Funkce přijímá všechny typy vstupních dat. |
Pole | Funkce přijímá libovolný datový typ pole. |
Jakýkoli prvek | Funkce přijímá libovolný datový typ. |
Jakýkoli výčet | Funkce přijímá libovolný datový typ výčtu. |
Nonarray | Funkce přijímá jakýkoli datový typ, který není v poli. |
Cstring | Funkce přijímá nebo vrací C řetězec ukončený nulou. |
Interní | Interní funkce přijímá nebo vrací interní datový typ serveru. |
Language_handler | Je deklarováno jako návratová obsluha jazyka. |
Záznam | Najděte funkci, která vrací nespecifikovaný typ řádku. |
spoušť | Spouštěcí funkce se používá k návratu spouště. |
Je důležité, aby se uživatel, který tuto funkci používá, musel ujistit, že se funkce bude chovat bezpečně, když je jako typ argumentu použit pseudotyp.
Doporučené postupy používání datových typů
- Pokud nechcete omezit vstup, použijte datový typ „text“.
- Nikdy nepoužívejte „char“.
- Celá čísla používají „int“. Bigint používejte pouze tehdy, když máte opravdu velká čísla
- Téměř vždy používejte „numerický“.
- Použijte float in PostgreSQL pokud máte zdroj dat IEEE 754
Shrnutí
- PostgreSQL nabízí uživatelům bohatou sadu nativních datových typů
- PostgreSQL podporuje datové typy znaků pro ukládání textových hodnot
- PostgreSQL podporuje dva odlišné typy čísel: 1. celá čísla, 2. čísla s pohyblivou řádovou čárkou
- Binární řetězec je posloupnost bajtů nebo oktetů
- PostgreSQL má typ síťové adresy, který vám pomůže optimalizovat ukládání síťových dat
- Textové vyhledávání PostgreSQL datové struktury jsou navrženy tak, aby podporovaly fulltextové vyhledávání
- Date/Time PSQL datové typy umožňují informace o datu a čase v různých formátech
- Booleovské typy polí Postgres mohou obsahovat tři hodnoty 1. True 2. False 3. Null
- Geometrický PostgreSQL datové typy představují dvourozměrné prostorové objekty
- Výčtové typy dat v PostgreSQL je užitečný pro reprezentaci zřídka se měnících informací, jako je kód země nebo id pobočky
- Universally Unique Identities (UUID) je 128bitové množství, které je generováno algoritmem
- PostgreSQL má mnoho položek pro speciální účely, které se nazývají pseudotypy
- Pokud nechcete omezit vstup, je nejlepší používat datový typ „text“.