PostgreSQL Tipuri de date: octet, numeric, caracter, binar

PostgreSQL oferă un set bogat de tipuri de date native pentru utilizatori. Utilizatorii pot adăuga noi tipuri cu ajutorul comenzii CREATE TYPE. De asemenea, face interogările mai simple și mai lizibile.

Tipuri de date în PostgreSQL

PostgreSQL acceptă următoarele tipuri de date:

  • Tipuri de text
  • Tipuri numerice
  • Datele și orele
  • XML
  • JSON
  • boolean
  • biţi
  • Date binare
  • Reţea
  • Arrays
  • Creați tipul dvs. de date
  • boolean
  • temporal
  • UUID
  • Mulțime
  • JSON
  • Tipuri speciale de date pentru stocarea unei adrese de rețea și a datelor geometrice.

Sa invatam PostgreSQL tipuri de date în detaliu

Tipuri de date de caractere

PostgreSQL acceptă tipuri de date caracter pentru stocarea valorilor text. PostgreSQL construiește tipuri de date de caractere din aceleași structuri interne. PostgreSQL oferă trei tipuri de date de caractere: CHAR(n), VARCHAR(n) și TEXT.

Nume Descriere
varchar(n) Vă permite să declarați lungimea variabilă cu o limită
Char(n) Lungime fixă, căptușită goală
Text Utilizarea poate folosi acest tip de date pentru a declara o variabilă cu lungime nelimitată

Tipuri de date numerice

PostgreSQL acceptă două tipuri distincte de numere:

  • Întregi
  • Numere în virgulă mobilă
Nume Dimensiunea magazinului Gamă
smallint Bytes 2 -32768 la + 32767
întreg Bytes 4 -2147483648 la + 2147483647
bigint Bytes 8 -9223372036854775808 9223372036854775807 a
zecimal variabil Dacă l-ați declarat ca tip de date zecimal, variază de la 131072 de cifre înainte de virgulă zecimală la 16383 de cifre după virgulă zecimală
numeric variabil Dacă îl declarați ca număr, puteți include un număr de până la 131072 de cifre înainte de virgulă zecimală până la 16383 de cifre după virgulă zecimală
real Bytes 4 Precizie de 6 cifre zecimale
dubla Bytes 8 Precizie de 15 cifre zecimale

Tipuri de date binare

Un șir binar este o secvență de octeți sau octeți. Tipurile de date binare Postgres sunt împărțite în două moduri.

  • Șirurile binare permit stocarea cotelor de valoare zero
  • Octeți neprintabili

Șirurile de caractere nu permit zero octeți și, de asemenea, nu permit orice alte valori și secvențe de octet care sunt invalide conform regulilor de codificare ale setului de caractere ale bazei de date.

Nume Dimensiunea stocării Descriere
Byte 1 până la 4 octeți plus dimensiunea șirului binar Șir binar de lungime variabilă

Tip de adresă de rețea

Multe aplicații stochează informații de rețea, cum ar fi adrese IP ale utilizatorilor sau senzori. PostgreSQL are trei tipuri native care vă ajută să optimizați datele din rețea.

Nume Mărimea Descriere
cidru 7 sau 19 octeți IPV4 și IPv6 rețele
Inet 7 sau 19 octeți Gazdă și rețele IPV4 și IPV5
macaddr Bytes 6 Adrese MAC

Utilizarea tipurilor de adrese de rețea are următoarele avantaje

  1. Economie de spațiu de stocare
  2. Verificarea erorilor de intrare
  3. Funcționează precum căutarea datelor după subrețea

Tip de căutare text

PostgreSQL furnizează două tipuri de date care sunt concepute pentru a sprijini căutarea full-text. Căutarea full-text înseamnă căutarea printr-o colecție de documente în limbaj natural pentru a le căuta pe cele care se potrivesc cel mai bine cu o interogare.

  • Căutare text Tsvector PostgreSQL tipurile de variabile reprezintă un document într-o formă optimizată pentru căutarea textului
  • Căutarea text tip interogare stochează cuvintele cheie care trebuie căutate

Tipuri de date Data/Ora

PostgreSQL marca temporală oferă precizie de microsecunde în loc de precizie de secundă. Mai mult, aveți și opțiunea de stocare cu fus orar sau fără. PostgreSQL va converti marca temporală cu fusul orar în UTC la intrare și o va stoca.

Introducerea datei și orei este acceptată în diferite formate, inclusiv Postgres tradițional, ISO 8601. Compatibil cu SQL etc.

PostgreSQL acceptă comanda Zi/Lună/An. Formatele acceptate sunt DMY, MDY, YMD

Tipuri de date temporale

Nume Mărimea Gamă Rezoluţie
Marca temporală fără fus orar Bytes 8 4713 î.Hr. până la 294276 d.Hr 1 microsecundă/14 cifre
Marca temporală cu fusul orar Bytes 8 4713 î.Hr. până la 294276 d.Hr 1 microsecundă/14 cifre
data Bytes 4 4713 î.Hr. până la 294276 d.Hr Intr-o zi
Ora fără fus orar Bytes 8 00:00:00 to 24:00:00 1 microsecundă/14 cifre
Ora cu fusul orar Bytes 12 00:00:00 + 1459 până la 24:00:00-1459 1 microsecundă/14 cifre
Interval Bytes 12 -178000000 până la 178000000 ani 1 microsecundă/14 cifre

Exemple

Intrare Descriere
2025-09-07 ISO 8601, 7 septembrie cu orice stil de dată (format recomandat)
7 Septembrie, 2025 7 septembrie cu orice stil de întâlnire
9/7/2025 7 septembrie cu MDY, 9 iulie cu DMY
9/7/25 7 septembrie 2025, cu MDY
2025-Sep-7 7 septembrie cu orice stil de întâlnire
7-sept-2018 7 septembrie cu orice stil de întâlnire
7-Sep-25 7 septembrie 2025, cu YMD
20250907 ISO 8601,7, 20225 septembrie XNUMX în orice mod
2025.250 anul și ziua anului, în acest caz, 7 septembrie 2025
J25250 întâlnire cu Julian

Ora/Ora cu intrare fus orar

Intrare Descriere
11:19:38.507
11:19:38
11:19
111938
ISO 8601
11: 19 AM La fel ca 11:19
11: 19 PM la fel ca 23:19
23: 19-3
23: 19-03: 00
231900-03
ISO 8601, la fel ca 11:19 EST
23: 19 EST fus orar specificat ca EST, la fel ca 11:19 EST

Tip boolean

Un tip de date boolean poate păstra

  • Adevărat
  • Fals
  • zero

valori.

Folosești un bool or boolean cuvânt cheie pentru a declara o coloană cu tipul de date boolean.

Când inserați valori într-o coloană booleană, Postgre convertește valori precum

  • Da
  • y
  • 1
  • t
  • adevărat

în 1.

În timp ce valori ca

  • Nu
  • N
  • 0
  • F
  • Fals

sunt convertite la 0

În timpul selectării datelor, valorile sunt din nou convertite în yes, true, y etc.

Tipuri de date geometrice

Tipurile de date geometrice reprezintă obiecte spațiale bidimensionale. Ele ajută la efectuarea de operațiuni precum rotații, scalare, translație etc.

Nume Dimensiunea stocării Reprezentare Descriere
Punct Bytes 16 Punct pe un avion (X y)
Linie Bytes 32 Linie infinită ((xl.yl ).(x2.y2))
Lseg Bytes 32 Segment de linie finită ((xl.yl ).(x2.y2))
Box Bytes 32 Dreptunghiular Box ((xl.yl ).(x2.y2))
Cale 16n + 16n octeți Închideți și deschideți Calea ((xl.yl),…)
Poligon 40 + 16n octeți Poligon [(xl.yl)….]
Cerc Bytes 24 Cerc <(xy).r> (punctul central și raza)

Tipuri enumerate

Enumerate PostgreSQL tipul de date este util pentru a reprezenta informații care se modifică rar, cum ar fi codul de țară sau id-ul sucursalei. Tipul de date enumerate este reprezentat într-un tabel cu chei străine pentru a asigura integritatea datelor.

Exemplu

Culoarea părului este destul de statică într-o bază de date demografică

CREATE TYPE hair_color AS ENUM
('brown','black','red','grey','blond')

Tipuri enumerate

Tipul intervalului

Multe aplicații de afaceri necesită date în intervale. De obicei, două coloane (de exemplu: data de început, data de încheiere) sunt definite pentru a trata intervalele. Acest lucru este atât ineficient, cât și dificil de întreținut.

Postgre a construit tipuri de gamă după cum urmează

  • int4range — Afișează intervalul întregului
  • int8range — Afișează intervalul de bigint
  • numrange — Afișează intervalul numeric
  • tstrange — Vă ajută să afișați marcajul de timp fără fus orar
  • ciudat — Vă permite să afișați marcaj de timp cu fusul orar
  • interval de date — Interval de date

tip UUID

Universally Unique Identifies (UUID) este o cantitate de 128 de biți care este generată de un algoritm. Este foarte puțin probabil ca același identificator să fie generat de o altă persoană din lume folosind același algoritm. De aceea, pentru sistemele distribuite, acești identificatori sunt o alegere ideală, deoarece oferă unicitate într-o singură bază de date. Un UUID este scris ca un grup de cifre hexazecimale minuscule, cu diferite grupuri separate prin cratime.

PostgreSQL are un tip de date UUID nativ care consumă 16 octeți de stocare. UUID este un tip de date ideal pentru cheile primare.

Exemplu

d5f28c97-b962-43be-9cf8-ca1632182e8e

Postgre acceptă, de asemenea, forme alternative de intrări UUID, cum ar fi toate majusculele, fără cratime, acolade etc.

tip XML

PostgreSQL vă permite să stocați date XML într-un tip de date, dar nu este altceva decât o extensie a unui tip de date text. Dar avantajul este că verifică dacă XML-ul de intrare este bine format.

Exemplu

XMLPARSE (DOCUMENT '<?xml version="1.0"?><tutorial><chapter>Data Type</chapter><chapter>...</chapter></tutorial>')

Tip JSON

Pentru a stoca date JSON PostgreSQL oferă 2 tipuri de date

  1. JSON
  2. JSONB
JSON Jsonb
O extensie simplă a unui tip de date text cu validare JSON O reprezentare binară a datelor JSON
Inserarea este rapidă, dar recuperarea datelor este relativ lentă. Inserarea este lentă, dar selectați (recuperarea datelor este rapidă)
Salvează datele introduse exact așa cum includ spațiile albe. Suporta indexarea. Poate optimiza spațiul alb pentru a face recuperarea mai rapidă.
Reprocesare la preluarea datelor Nu este necesară reprocesarea la preluarea datelor

Cel mai utilizat tip de date JSON ne-a folosit jsonb, cu excepția cazului în care există o nevoie specializată de a folosi tipul de date JSON.

Exemplu

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}'); 

Pseudo-tipuri

PostgreSQL are multe intrări cu scop special care sunt numite pseudo-tipuri. Nu puteți folosi pseudo-tipuri ca PostgreSQL tipuri de coloane. Sunt folosite pentru a declara sau a argumentului funcției sau a tipului de returnare.

Fiecare dintre pseudo-tipurile disponibile este util în situațiile în care documentele de comportament ale unei funcții nu corespund pur și simplu cu luarea sau returnarea unei valori a unui anumit tip de date SQL.

Nume Descriere
Orice Funcția acceptă toate tipurile de date de intrare.
O matrice Funcția acceptă orice tip de date matrice.
Orice element Funcția acceptă orice tip de date.
Orice enumerare Funcția acceptă orice tip de date enumerare.
Nonarray Funcția acceptă orice tip de date non-matrice.
Cstring Funcția acceptă sau returnează șirul C terminat cu nul.
Intern Funcția internă acceptă sau returnează tipul de date intern al serverului.
Handler_lingv Este declarat că returnează handler-ul de limbă.
Record Găsiți o funcție care returnează un tip de rând nespecificat.
trăgaci O funcție de declanșare este utilizată pentru a returna declanșatorul.

Este important ca utilizatorul care folosește această funcție trebuie să se asigure că funcția se va comporta în siguranță atunci când un pseudo-tip este folosit ca tip de argument.

Cele mai bune practici folosind tipuri de date

  • Utilizați tipul de date „text”, cu excepția cazului în care doriți să limitați intrarea
  • Nu folosi niciodată „char”.
  • Numerele întregi folosesc „int”. Folosiți bigint numai atunci când aveți numere foarte mari
  • Folosiți „numeric” aproape întotdeauna
  • Folosiți float-ul PostgreSQL dacă aveți sursă de date IEEE 754

Rezumat

  • PostgreSQL oferă un set bogat de tipuri de date native pentru utilizatori
  • PostgreSQL acceptă tipuri de date caracter pentru stocarea valorilor text
  • PostgreSQL acceptă două tipuri distincte de numere: 1. Numere întregi, 2. Numere în virgulă mobilă
  • Un șir binar este o secvență de octeți sau octeți
  • PostgreSQL are tip de adresă de rețea pentru a vă ajuta să optimizați stocarea datelor din rețea
  • Căutare text PostgreSQL structurile de date sunt concepute pentru a sprijini căutarea full-text
  • Data/Ora Tipurile de date PSQL permit informații despre dată și oră în diferite formate
  • Tipurile de câmpuri Boolean Postgres pot conține trei valori 1. Adevărat 2. Fals 3. Nul
  • Geometric PostgreSQL tipurile de date reprezintă obiecte spațiale bidimensionale
  • Tipuri de date enumerate în PostgreSQL este util pentru reprezentarea informațiilor care se modifică rar, cum ar fi codul de țară sau id-ul sucursalei
  • Universally Unique Identifies (UUID) este o cantitate de 128 de biți care este generată de un algoritm
  • PostgreSQL are multe intrări cu scop special care sunt numite pseudo-tipuri
  • Este cea mai bună practică să utilizați tipul de date „text”, cu excepția cazului în care doriți să limitați intrarea