Wszystkie typowe typy danych kolumn PostgreSQL pogrupowane według rodziny: liczby całkowite, dziesiętne, tekst, czas, wartości logiczne i UUID, JSON, adresy sieciowe, typy złożone i typy z rozszerzeń. Każdy wiersz pokazuje, co typ przechowuje i kiedy go wybrać.
PostgreSQL ma dziesiątki typów, ale codzienne projektowanie schematów opiera się na wąskim zestawie podstawowych. Powtarzające się wybory to: integer kontra numeric dla liczb, varchar kontra text dla stringów (text zwykle wystarczy), timestamp kontra timestamptz (preferuj timestamptz dla wszystkiego z realnego świata) oraz json kontra jsonb (preferuj jsonb — jest binarny i indeksowalny). Wybierz najbardziej konkretny typ, który nadal pasuje; baza danych wymusi go za ciebie.
Tabela referencyjna · 46 wpisy
Typy danych PostgreSQLExplained
46 of 46 rows
Liczby całkowite
Liczba całkowita 2-bajtowa od -32768 do 32767.
Rzadko; tylko gdy musisz oszczędzić miejsce.
Liczba całkowita 4-bajtowa, około plus/minus 2 miliardy.
Domyślna kolumna na liczby całkowite.
Liczba całkowita 8-bajtowa, około plus/minus 9 trylionów.
Bardzo duże liczniki lub zewnętrzne identyfikatory.
Automatycznie rosnąca liczba całkowita 4-bajtowa.
Starsze klucze z autonumeracją; od PG 10 zalecanym następcą jest GENERATED AS IDENTITY.
Warianty 2- i 8-bajtowe serial.
Autonumeracja dopasowana do kolumny smallint lub bigint.
Liczba całkowita generowana przez tabelę (GENERATED ALWAYS AS IDENTITY).
Nowoczesny serial; zgodny ze standardem SQL i bezpieczniejszy przy ręcznych wstawieniach.
Ułamki dziesiętne i zmiennoprzecinkowe
Dokładne liczby dziesiętne o dowolnej precyzji.
Pieniądze i wszystko, gdzie błędy zaokrągleń są niedopuszczalne.
Liczba zmiennoprzecinkowa 4-bajtowa pojedynczej precyzji.
Przybliżone wartości naukowe, gdzie precyzja nie jest krytyczna.
Liczba zmiennoprzecinkowa 8-bajtowa podwójnej precyzji.
Dane geoprzestrzenne, statystyka i wartości cech ML.
Kwota w walucie ze stałym locale.
Rzadko; numeric z kodem waluty po stronie aplikacji jest bardziej przenośny.
Tekst
Tekst o stałej długości, wypełniany spacjami.
Kody o znanej szerokości; rzadko potrzebne.
Tekst o zmiennej długości z opcjonalnym limitem.
Ograniczone stringi, np. nazwy użytkowników lub e-maile.
Tekst o zmiennej długości bez limitu.
Uniwersalna kolumna tekstowa; bez kary wydajnościowej względem varchar.
Czas
Data kalendarzowa bez pory dnia.
Urodziny i terminy.
Pora dnia, ze strefą czasową lub bez.
Codzienne alarmy lub godziny otwarcia.
Data i czas bez strefy czasowej.
Starsze schematy; unikaj w nowych projektach.
Data i czas przechowywane jako UTC, pokazywane w strefie klienta.
Domyślny wybór dla każdego realnego momentu; preferuj zamiast timestamp.
Okres czasu, np. 2 dni lub 3 godziny.
Czas trwania i arytmetyka dat.
Boolean, UUID i bajty
Prawda lub fałsz.
Flagi i przełączniki.
128-bitowy uniwersalny unikalny identyfikator.
Nieprzewidywalne identyfikatory bezpieczne do ujawnienia (generuj w aplikacji lub przez gen_random_uuid).
Surowe bajty binarne.
Bloby, obrazy i nieprzezroczyste dane; duże pliki trzymaj w object storage.
Ciągi bitów o stałej lub zmiennej długości.
Spakowane flagi i pola protokołów; pojedyncza wartość wł./wył. to nadal boolean.
JSON i dane półstrukturalne
JSON parsowany do binarnej, indeksowalnej postaci.
Elastyczne lub zagnieżdżone dane; zalecana kolumna JSON (obsługuje indeksy GIN).
JSON przechowywany jako oryginalny tekst.
Rzadko; tylko gdy musisz zachować kolejność kluczy lub dokładne białe znaki.
Tekst XML.
Starsze integracje wymagające XML.
Skompilowane wyrażenie ścieżki do nawigacji po danych JSON.
Filtrowanie w jsonb przez jsonb_path_query i operatory SQL/JSON.
Sieć i wyszukiwanie
Adres hosta IPv4 lub IPv6.
Przechowywanie IP klientów lub serwerów.
Blok sieci IP, np. 10.0.0.0/24.
Reguły firewalla i zakresy podsieci.
Adres MAC 6- lub 8-bajtowy (EUI-64).
Identyfikatory urządzeń i interfejsów sieciowych.
Wstępnie przetworzony tekst do wyszukiwania pełnotekstowego.
Wbudowane wyszukiwanie Postgresa, zanim sięgniesz po osobną wyszukiwarkę.
Terminy wyszukiwania łączone operatorami AND, OR i prefiksu.
Część zapytania wyszukiwania pełnotekstowego, dopasowywana do tsvector przez @@.
Pozycja w dzienniku write-ahead, numer sekwencyjny loga.
Monitorowanie opóźnienia replikacji i kopii zapasowych.
Typy złożone i zaawansowane
Tablica dowolnego typu bazowego, np. integer[].
Listy prostych wartości; gdy elementy potrzebują własnych kolumn, użyj tabeli potomnej.
Jedna wartość ze zdefiniowanej przez ciebie stałej listy.
Pola statusu o stabilnym zbiorze opcji.
Własny typ wierszowy z kilku pól.
Powtarzające się grupy pól współdzielone między tabelami.
Ciągły zakres między dwiema granicami.
Grafiki, przedziały cen i zakresy wersji, z operatorami nakładania.
Typ bazowy opakowany w zdefiniowane przez ciebie ograniczenia.
Wielokrotnego użytku reguły, np. niepusty e-mail, wymuszane w każdej kolumnie, która go używa.
Nienazwany wiersz wartości o określonych typach.
Wartości zwracane przez funkcje PL/pgSQL i pośrednie wyniki zapytań.