PostgreSQL Typy danych: bajt, numeryczny, znakowy, binarny
PostgreSQL oferuje bogaty zestaw natywnych typรณw danych dla uลผytkownikรณw. Uลผytkownicy mogฤ dodawaฤ nowe typy za pomocฤ polecenia CREATE TYPE. Sprawia rรณwnieลผ, ลผe zapytania sฤ prostsze i bardziej czytelne.
Typy danych w PostgreSQL
PostgreSQL obsลuguje nastฤpujฤ ce typy danych:
- Typy tekstu
- Typy numeryczne
- Daty i godziny
- XML
- JSON
- Boolean
- Bity
- Dane binarne
- Sieฤ
- Tablice
- Utwรณrz swรณj typ danych
- Boolean
- Temporal
- UUID
- Szyk
- JSON
- Specjalne typy danych do przechowywania adresu sieciowego i danych geometrycznych.
Pouczmy siฤ PostgreSQL szczegรณลowo typy danych
Typy danych znakรณw
PostgreSQL obsลuguje znakowe typy danych do przechowywania wartoลci tekstowych. PostgreSQL buduje znakowe typy danych na podstawie tych samych struktur wewnฤtrznych. PostgreSQL oferuje trzy znakowe typy danych: CHAR(n), VARCHAR(n) i TEXT.
| Imiฤ i nazwisko | OPIS |
|---|---|
| varchar(n) | Umoลผliwia zadeklarowanie zmiennej dลugoลci z limitem |
| Znak (n) | Staลa dลugoลฤ, pusta wyลciรณลka |
| Tekst | Use moลผe uลผyฤ tego typu danych do zadeklarowania zmiennej o nieograniczonej dลugoลci |
Numeryczne typy danych
PostgreSQL obsลuguje dwa rรณลผne typy liczb:
- Liczby caลkowite
- Liczb zmiennoprzecinkowych
| Imiฤ i nazwisko | Rozmiar sklepu | ลodzie |
|---|---|---|
| maลyint | 2 bajtรณw | -32768 do + 32767 |
| liczba caลkowita | 4 bajtรณw | -2147483648 do + 2147483647 |
| bigint | 8 bajtรณw | -9223372036854775808 do 9223372036854775807 |
| dziesiฤtny | zmienna | Jeลli zadeklarowaลeล to jako dziesiฤtny, typ danych ma zakres od 131072 cyfr przed przecinkiem do 16383 cyfr po przecinku |
| numeryczna | zmienna | Jeลli zadeklarujesz to jako liczbฤ, moลผesz podaฤ liczbฤ do 131072 cyfr przed przecinkiem do 16383 cyfr po przecinku |
| real | 4 bajtรณw | Dokลadnoลฤ 6 cyfr dziesiฤtnych |
| Podwรณjna | 8 bajtรณw | Dokลadnoลฤ 15 cyfr dziesiฤtnych |
Binarne typy danych
Ciฤ g binarny to sekwencja oktetรณw lub bajtรณw. Binarne typy danych Postgres sฤ podzielone na dwa sposoby.
- Ciฤ gi binarne umoลผliwiajฤ przechowywanie kursรณw o wartoลci zero
- Oktety niedrukowalne
Ciฤ gi znakรณw nie pozwalajฤ na oktety zerowe, a takลผe na inne wartoลci i sekwencje oktetรณw, ktรณre sฤ nieprawidลowe zgodnie z reguลami kodowania zestawu znakรณw bazy danych.
| Imiฤ i nazwisko | Rozmiar pamiฤci | OPIS |
|---|---|---|
| Bajt | 1 do 4 bajtรณw plus rozmiar ciฤ gu binarnego | Ciฤ g binarny o zmiennej dลugoลci |
Typ adresu sieciowego
Wiele aplikacji przechowuje informacje sieciowe, takie jak adresy IP uลผytkownikรณw lub czujniki. PostgreSQL ma trzy typy natywne, ktรณre pomagajฤ zoptymalizowaฤ dane sieciowe.
| Imiฤ i nazwisko | Rozmiar | OPIS |
|---|---|---|
| jabลecznik | 7 lub 19 bajty | IPV4 i IPv6 sieci |
| Inet | 7 lub 19 bajty | Hosty i sieci IPV4 i IPV5 |
| makaddr | 6 bajtรณw | Adresy MAC |
Korzystanie z typรณw adresรณw sieciowych ma nastฤpujฤ ce zalety
- Oszczฤdnoลฤ miejsca do przechowywania
- Sprawdzanie bลฤdรณw wejลciowych
- Funkcje takie jak wyszukiwanie danych wedลug podsieci
Typ wyszukiwania tekstowego
PostgreSQL zapewnia dwa typy danych, ktรณre sฤ zaprojektowane do obsลugi wyszukiwania peลnotekstowego. Wyszukiwanie peลnotekstowe polega na przeszukiwaniu zbioru dokumentรณw w jฤzyku naturalnym w celu znalezienia tych, ktรณre najlepiej pasujฤ do zapytania.
- Wyszukiwanie tekstu wektorowego PostgreSQL typy zmiennych reprezentujฤ dokument w formie zoptymalizowanej pod kฤ tem wyszukiwania tekstowego
- Wyszukiwanie tekstowe typu zapytania przechowuje sลowa kluczowe, ktรณre naleลผy przeszukaฤ
Typy danych daty/godziny
PostgreSQL timestamp oferuje precyzjฤ mikrosekundowฤ zamiast drugiej precyzji. Co wiฤcej, masz rรณwnieลผ moลผliwoลฤ przechowywania ze strefฤ czasowฤ lub bez. PostgreSQL skonwertuje znacznik czasu ze strefฤ czasowฤ na UTC na wejลciu i zapisze go.
Wprowadzanie daty i godziny jest akceptowane w rรณลผnych formatach, w tym w tradycyjnym Postgres, ISO 8601. Kompatybilny z SQL itp.
PostgreSQL obsลuguje porzฤ dkowanie dnia/miesiฤ ca/roku. Obsลugiwane formaty to DMY, MDY, YMD
Tymczasowe typy danych
| Imiฤ i nazwisko | Rozmiar | ลodzie | Rozkลad |
|---|---|---|---|
| Znacznik czasu bez strefy czasowej | 8 bajtรณw | 4713 pne do 294276 ne | 1 mikrosekunda/14 cyfr |
| Znacznik czasu ze strefฤ czasowฤ | 8 bajtรณw | 4713 pne do 294276 ne | 1 mikrosekunda/14 cyfr |
| dane | 4 bajtรณw | 4713 pne do 294276 ne | Pewnego dnia |
| Czas bez strefy czasowej | 8 bajtรณw | 00:00:00 to 24:00:00 | 1 mikrosekunda/14 cyfr |
| Czas ze strefฤ czasowฤ | 12 bajtรณw | 00:00:00 + 1459 do 24:00:00-1459 | 1 mikrosekunda/14 cyfr |
| Przedziaล | 12 bajtรณw | -178000000 do 178000000 lat | 1 mikrosekunda/14 cyfr |
Przykลady
| Wkลad | OPIS |
|---|---|
| 2025-09-07 | ISO 8601, 7 wrzeลnia z dowolnym stylem daty (zalecany format) |
| September 7, 2025 | 7 wrzeลnia w dowolnym stylu daty |
| 9/7/2025 | 7 wrzeลnia z MDY, 9 lipca z DMY |
| 9/7/25 | 7 wrzeลnia 2025 r. z MDY |
| 2025-Sep-7 | 7 wrzeลnia w dowolnym stylu daty |
| 7-wrzesieล-2018 | 7 wrzeลnia w dowolnym stylu daty |
| 7-Sep-25 | 7 wrzeลnia 2025 r. z YMD |
| 20250907 | ISO 8601,7 wrzeลnia 20225 w dowolnym trybie |
| 2025.250 | rok i dzieล roku, w tym przypadku 7 wrzeลnia 2025 r |
| J25250 | Data juliaลska |
Czas/czas z wprowadzeniem strefy czasowej
| Wkลad | OPIS |
|---|---|
| 11:19:38.507 11:19:38 11:19 111938 |
ISO 8601 |
| 11: 19 AM | Tak samo jak o 11:19 |
| 11: 19 PM | tak samo jak 23:19 |
| 23: 19-3 23: 19-03: 00 231900-03 |
ISO 8601, tak samo jak o 11:19 EST |
| 23: 19 EST | strefa czasowa okreลlona jako EST, taka sama jak 11:19 EST |
Typ logiczny
Typ danych Boolean moลผe przechowywaฤ
- Prawdziwy
- Faลszywy
- zero
wartoลci.
Uลผywasz bool or boolean sลowo kluczowe sลuลผฤ ce do zadeklarowania kolumny o typie danych Boolean.
Kiedy wstawisz wartoลci do kolumny logicznej, Postgre konwertuje wartoลci takie jak
- Tak
- y
- 1
- t
- prawdziwy
do 1.
Chociaลผ wartoลci takie jak
- Nie
- N
- 0
- F
- Faลszywy
sฤ konwertowane na 0
Podczas wybierania danych wartoลci sฤ ponownie konwertowane na tak, prawda, y itd.
Geometryczne typy danych
Typy danych geometrycznych reprezentujฤ dwuwymiarowe obiekty przestrzenne. Pomagajฤ wykonywaฤ operacje takie jak obroty, skalowanie, translacje itp.
| Imiฤ i nazwisko | Rozmiar pamiฤci | Reprezentacja | OPIS |
|---|---|---|---|
| punkt | 16 bajtรณw | Punkt na pลaszczyลบnie | (x, y) |
| Line | 32 bajtรณw | Nieskoลczona linia | ((xl.yl).(x2.y2)) |
| Lseg | 32 bajtรณw | Skoลczony odcinek linii | ((xl.yl).(x2.y2)) |
| Box | 32 bajtรณw | Prostokฤ tny Box | ((xl.yl).(x2.y2)) |
| ลcieลผka | 16n + 16n bajtรณw | Zamknij i otwรณrz ลcieลผkฤ | ((xl.yl),โฆ) |
| Wielokฤ t | 40 + 16n bajtรณw | Wielokฤ t | [(xl.yl)โฆ.] |
| Okrฤ gลe | 24 bajtรณw | Okrฤ gลe | <(xy).r> (punkt ลrodkowy i promieล) |
Wyliczone typy
Wyliczone PostgreSQL typ danych jest przydatny do reprezentowania rzadko zmieniajฤ cych siฤ informacji, takich jak kod kraju lub identyfikator oddziaลu. Wyliczeniowy typ danych jest reprezentowany w tabeli z kluczami obcymi, aby zapewniฤ integralnoลฤ danych.
Przykลad
Kolor wลosรณw jest doลฤ statyczny w bazie danych demograficznych
CREATE TYPE hair_color AS ENUM
('brown','black','red','grey','blond')
Typ zakresu
Wiele aplikacji biznesowych wymaga danych w zakresach. Zwykle definiuje siฤ dwie kolumny (przykลad: data poczฤ tkowa, data koลcowa) w celu obsลugi zakresรณw. Jest to zarรณwno nieefektywne, jak i trudne w utrzymaniu.
Postgre zbudowaล typy zakresรณw w nastฤpujฤ cy sposรณb
- int4range โ Zakres wyลwietlania liczby caลkowitej
- int8range โ Zakres wyลwietlania biginta
- numrange โ Pokazuje zakres liczbowy
- tstrange โ Pomaga wyลwietliฤ znacznik czasu bez strefy czasowej
- dziwne โ umoลผliwia wyลwietlenie znacznika czasu ze strefฤ czasowฤ
- zakres dat โ zakres dat
Typ UUID
Uniwersalnie unikalne identyfikatory (UUID) to 128-bitowa wielkoลฤ generowana przez algorytm. Jest bardzo maลo prawdopodobne, ลผe ten sam identyfikator zostanie wygenerowany przez innฤ osobฤ na ลwiecie przy uลผyciu tego samego algorytmu. Dlatego w przypadku systemรณw rozproszonych identyfikatory te sฤ idealnym wyborem, poniewaลผ zapewniajฤ unikalnoลฤ w ramach jednej bazy danych. Identyfikator UUID zapisywany jest jako grupa maลych cyfr w formacie szesnastkowym, rozdzielonych ลฤ cznikami.
PostgreSQL ma natywny typ danych UUID, ktรณry zajmuje 16 bajtรณw pamiฤci. UUID jest idealnym typem danych dla kluczy podstawowych.
Przykลad
d5f28c97-b962-43be-9cf8-ca1632182e8e
Postgre akceptuje rรณwnieลผ alternatywne formy danych wejลciowych UUID, takie jak wielkie litery, bez ลฤ cznikรณw, nawiasรณw klamrowych itp.
Typ XML
PostgreSQL umoลผliwia przechowywanie danych XML w typie danych, ale jest to nic innego jak rozszerzenie typu danych tekstowych. Zaletฤ jest jednak to, ลผe sprawdza, czy wejลciowy kod XML jest poprawnie sformuลowany.
Przykลad
XMLPARSE (DOCUMENT '<?xml version="1.0"?><tutorial><chapter>Data Type</chapter><chapter>...</chapter></tutorial>')
Typ JSON
Do przechowywania danych JSON PostgreSQL oferuje 2 typy danych
- JSON
- JSONB
| json | Jsonba |
|---|---|
| Proste rozszerzenie typu danych tekstowych z walidacjฤ JSON | Binarna reprezentacja danych JSON |
| Wstawianie jest szybkie, ale pobieranie danych jest stosunkowo powolne. | Wstawianie jest powolne, ale wybierz (pobieranie danych jest szybkie) |
| Zapisuje wprowadzone dane dokลadnie w takiej postaci, w jakiej sฤ , ลฤ cznie z biaลymi znakami. | Obsลuguje indeksowanie. Moลผe zoptymalizowaฤ biaลe znaki, aby przyspieszyฤ pobieranie. |
| Ponowne przetwarzanie przy pobieraniu danych | Przy pobieraniu danych nie jest wymagane ponowne przetwarzanie |
Najpopularniejszym typem danych JSON byล uลผywany przez nas jsonb, chyba ลผe istnieje specjalistyczna potrzeba uลผycia typu danych JSON.
Przykลad
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 zawiera wiele wpisรณw specjalnego przeznaczenia, zwanych pseudotypami. Nie moลผna uลผywaฤ pseudotypรณw jako PostgreSQL typy kolumn. Sลuลผy do deklarowania argumentu lub typu zwracanego przez funkcjฤ.
Kaลผdy z dostฤpnych pseudotypรณw jest pomocny w sytuacjach, gdy dokumentacja zachowania funkcji nie odpowiada prostemu przyjฤciu lub zwrรณceniu wartoลci okreลlonego Typ danych SQL.
| Imiฤ i nazwisko | OPIS |
|---|---|
| Kaลผdy | Funkcja akceptuje wszystkie typy danych wejลciowych. |
| Tablica | Funkcja akceptuje dowolny typ danych tablicowych. |
| Dowolny element | Funkcja akceptuje dowolny typ danych. |
| Dowolne wyliczenie | Funkcja akceptuje dowolny typ danych wyliczeniowych. |
| Brak ukลadu | Funkcja akceptuje dowolny typ danych inny niลผ tablicowy. |
| Ciฤ g c | Funkcja akceptuje lub zwraca ciฤ g C zakoลczony znakiem null. |
| Wewnฤtrzne | Funkcja wewnฤtrzna akceptuje lub zwraca typ danych wewnฤtrznych serwera. |
| Obsลuga_jฤzyka | Zadeklarowano zwrรณcenie procedury obsลugi jฤzyka. |
| Rekord | Znajdลบ funkcjฤ, ktรณra zwraca nieokreลlony typ wiersza. |
| Cyngiel | Funkcja wyzwalacza sลuลผy do zwracania wyzwalacza. |
Waลผne jest, aby uลผytkownik korzystajฤ cy z tej funkcji upewniล siฤ, ลผe funkcja bฤdzie zachowywaฤ siฤ bezpiecznie, gdy jako argument zostanie uลผyty pseudotyp.
Najlepsze praktyki przy uลผyciu typรณw danych
- Uลผyj typu danych โtekstโ, chyba ลผe chcesz ograniczyฤ wprowadzane dane
- Nigdy nie uลผywaj โcharโ.
- Do liczb caลkowitych uลผywa siฤ โintโ. Uลผywaj bigint tylko wtedy, gdy masz naprawdฤ duลผe liczby.
- Prawie zawsze uลผywaj sลowa โnumerycznyโ.
- Uลผyj pลywaka PostgreSQL jeลli masz ลบrรณdลo danych IEEE 754
Podsumowanie
- PostgreSQL oferuje uลผytkownikom bogaty zestaw natywnych typรณw danych
- PostgreSQL obsลuguje znakowe typy danych do przechowywania wartoลci tekstowych
- PostgreSQL obsลuguje dwa rรณลผne typy liczb: 1. Liczby caลkowite, 2. Liczby zmiennoprzecinkowe
- Ciฤ g binarny to sekwencja bajtรณw lub oktetรณw
- PostgreSQL ma typ adresu sieciowego, ktรณry pomaga zoptymalizowaฤ przechowywanie danych sieciowych
- Wyszukiwanie tekstu PostgreSQL Struktury danych sฤ zaprojektowane do obsลugi wyszukiwania peลnotekstowego
- Data/godzina Typy danych PSQL umoลผliwiajฤ podanie daty i godziny w rรณลผnych formatach
- Typy pรณl Boolean Postgres mogฤ przechowywaฤ trzy wartoลci 1. Prawda 2. Faลsz 3. Null
- Geometryczne PostgreSQL typy danych reprezentujฤ dwuwymiarowe obiekty przestrzenne
- Wyliczone typy danych w PostgreSQL jest przydatny do reprezentowania rzadko zmieniajฤ cych siฤ informacji, takich jak kod kraju lub identyfikator oddziaลu
- Uniwersalnie unikalne identyfikatory (UUID) to 128-bitowa wielkoลฤ generowana przez algorytm
- PostgreSQL zawiera wiele wpisรณw specjalnego przeznaczenia, zwanych pseudotypami
- Najlepszฤ praktykฤ jest uลผywanie typu danych โtekstโ, chyba ลผe chcesz ograniczyฤ wprowadzane dane
