Toate tipurile de date comune pentru coloane PostgreSQL, grupate pe familii: numere întregi, zecimale, text, timp, valori logice și UUID, JSON, adrese de rețea, tipuri compuse și tipuri din extensii. Fiecare rând arată ce stochează tipul și când să-l alegi.
PostgreSQL are zeci de tipuri, dar proiectarea zilnică a schemelor folosește un set de bază. Alegerile recurente sunt: integer versus numeric pentru numere, varchar versus text pentru șiruri (text este de obicei suficient), timestamp versus timestamptz (preferă timestamptz pentru orice moment real) și json versus jsonb (preferă jsonb — este binar și indexabil). Alege tipul cel mai specific care se potrivește; baza de date îl impune pentru tine.
Tabel de referință · 46 intrări
Tipuri de date PostgreSQLExplained
46 of 46 rows
Numere întregi
Un întreg pe 2 octeți, de la -32768 la 32767.
Rar; doar când trebuie să economisești spațiu.
Un întreg pe 4 octeți, aproximativ plus/minus 2 miliarde.
Coloana implicită pentru numere întregi.
Un întreg pe 8 octeți, aproximativ plus/minus 9 triliarde.
Numărători foarte mari sau ID-uri externe.
Un întreg pe 4 octeți cu incrementare automată.
Chei auto-numerate vechi; din PG 10, GENERATED AS IDENTITY este înlocuitorul recomandat.
Variantele pe 2 și 8 octeți ale lui serial.
Numerotare automată adaptată la o coloană smallint sau bigint.
Un întreg pe care tabelul îl generează pentru tine (GENERATED ALWAYS AS IDENTITY).
Serial-ul modern; standard SQL și mai sigur împotriva inserțiilor manuale.
Zecimale și numere cu virgulă mobilă
Zecimale exacte cu precizie arbitrară.
Bani și orice unde erorile de rotunjire sunt inacceptabile.
Un float pe 4 octeți cu precizie simplă.
Valori științifice aproximative, unde precizia nu este critică.
Un float pe 8 octeți cu precizie dublă.
Date geospațiale, statistici și valori de feature-uri ML.
O sumă în valută cu un locale fix.
Rar; numeric cu un cod de valută în aplicație este mai portabil.
Text
Text de lungime fixă, completat cu spații.
Coduri de lățime cunoscută; rareori necesar.
Text de lungime variabilă cu o limită opțională.
Șiruri limitate, precum nume de utilizator sau e-mailuri.
Text de lungime variabilă fără limită de lungime.
Coloana generală pentru șiruri; fără penalizare de performanță față de varchar.
Timp
O dată calendaristică fără ora zilei.
Zile de naștere și termene limită.
O oră a zilei, cu sau fără fus orar.
Alarme zilnice sau program de magazin.
Dată și oră fără fus orar.
Scheme vechi; evită în proiecte noi.
Dată și oră stocate ca UTC, afișate în fusul clientului.
Alegerea implicită pentru orice moment real; prefer-o în locul lui timestamp.
Un interval de timp, cum ar fi 2 zile sau 3 ore.
Durate și aritmetică de date.
Boolean, UUID și octeți
Adevărat sau fals.
Indicatori și comutatoare.
Un identificator unic universal pe 128 de biți.
ID-uri nesequențiale, sigure de expus (generează-le în aplicație sau cu gen_random_uuid).
Octeți binari bruti.
Blob-uri, imagini și payload-uri opace; pentru fișiere mari preferă object storage.
Șiruri de biți de lungime fixă sau variabilă.
Indicatori împachetați și câmpuri de protocol; o singură valoare pornit/oprit rămâne boolean.
JSON și semistructurat
JSON parsat într-o formă binară, indexabilă.
Date flexibile sau imbricate; coloana JSON recomandată (suportă indecși GIN).
JSON păstrat ca textul original.
Rar; doar când trebuie să păstrezi ordinea cheilor sau spațiile exacte.
Text XML.
Integrări vechi care necesită XML.
O expresie de cale compilată pentru navigarea în datele JSON.
Filtrare în jsonb cu jsonb_path_query și operatorii SQL/JSON.
Rețea și căutare
O adresă de gazdă IPv4 sau IPv6.
Stocarea IP-urilor de clienți sau servere.
Un bloc de rețea IP, cum ar fi 10.0.0.0/24.
Reguli de firewall și intervale de subrețele.
O adresă MAC pe 6 sau 8 octeți (EUI-64).
Identificatori de dispozitive și interfețe de rețea.
Text preprocesat pentru căutare full-text.
Căutarea integrată din Postgres înainte de a apela la un motor de căutare separat.
Termeni de căutare combinați cu operatorii AND, OR și de prefix.
Jumătatea de interogare a căutării full-text, potrivită cu un tsvector prin @@.
O poziție în jurnalul write-ahead, numărul de secvență al logului.
Monitorizarea decalajului de replicare și a copiilor de rezervă.
Compus și avansat
Un array de orice tip de bază, de ex. integer[].
Liste de valori simple; folosește un tabel copil când elementele au nevoie de coloane proprii.
O valoare dintr-o listă fixă definită de tine.
Câmpuri de status cu un set stabil de opțiuni.
Un tip de rând propriu din mai multe câmpuri.
Grupuri de câmpuri recurente, partajate între tabele.
Un interval continuu între două limite.
Programări, intervale de prețuri și versiuni, cu operatori de suprapunere.
Un tip de bază împachetat în constrângeri definite de tine.
Reguli reutilizabile, precum un e-mail nevid, impuse în fiecare coloană care îl folosește.
Un rând fără nume de valori tipizate.
Valorile returnate de funcțiile PL/pgSQL și rezultatele intermediare ale interogărilor.
Valori geometrice bidimensionale integrate.
Geometrie plană simplă; locațiile reale au nevoie de PostGIS.
Un identificator de obiect sistem pe 4 octeți, fără semn.
Join-uri între cataloagele sistemului; nu pentru coloane de aplicație.
Un șir de identificare intern de 63 de caractere.
Interogări pe cataloage; text obișnuit pentru orice este vizibil pentru utilizatori.
Tipuri din extensii
Perechi cheie/valoare text într-o singură valoare (extensie).
Map-uri plate; jsonb acoperă asta mai bine astăzi.
O cale de etichete ierarhică, precum news.tech.ai (extensie).
Arbori cu interogări de strămoși și descendenți.
Text comparat fără distincție între majuscule și minuscule (extensie).
Unicitate case-insensitive, precum e-mailuri, fără index lower().
Obiecte geografice și geometrice din extensia PostGIS.
Interogări de distanță, conținere și indecși spațiali.
Funcții de extensie care generează valori UUID.
Generare veche; din PG 13, gen_random_uuid() este integrat.