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

  1. Oszczฤ™dnoล›ฤ‡ miejsca do przechowywania
  2. Sprawdzanie bล‚ฤ™dรณw wejล›ciowych
  3. 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')

Wyliczone typy

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

  1. JSON
  2. 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

Podsumuj ten post nastฤ™pujฤ…co: