PostgreSQL Vrste podataka: bajt, numerički, znakovni, binarni
PostgreSQL nudi bogat skup izvornih tipova podataka za korisnike. Korisnici mogu dodavati nove tipove uz pomoć naredbe CREATE TYPE. Također čini upite jednostavnijima i čitljivijima.
Vrste podataka u PostgreSQL
PostgreSQL podržava sljedeće vrste podataka:
- Vrste teksta
- Numerički tipovi
- Datumi i vremena
- XML
- JSON
- Booleova
- bitovi
- Binarni podaci
- mreža
- nizovi
- Izradite svoju vrstu podataka
- Booleova
- privremen
- UUID
- Poredak
- JSON
- Posebni tipovi podataka za pohranu mrežne adrese i geometrijskih podataka.
Idemo učiti PostgreSQL vrste podataka u detalje
Znakovni tipovi podataka
PostgreSQL podržava karakterne tipove podataka za pohranu tekstualnih vrijednosti. PostgreSQL gradi znakovne tipove podataka od istih unutarnjih struktura. PostgreSQL nudi tri znakovna tipa podataka: CHAR(n), VARCHAR(n) i TEXT.
| Ime | Description |
|---|---|
| varchar(n) | Omogućuje vam da deklarirate varijabilnu duljinu s ograničenjem |
| znak(n) | Fiksne duljine, prazno podstavljene |
| Tekst | Use može koristiti ovaj tip podataka za deklariranje varijable neograničene duljine |
Numerički tipovi podataka
PostgreSQL podržava dvije različite vrste brojeva:
- cijeli brojevi
- Brojevi s pomičnim zarezom
| Ime | Veličina trgovine | Raspon |
|---|---|---|
| smallint | 2 bajtova | -32768 do +32767 |
| cijeli | 4 bajtova | -2147483648 do +2147483647 |
| bigint | 8 bajtova | -9223372036854775808 da 9223372036854775807 |
| decimal | varijabla | Ako ste ga deklarirali kao decimalni tip podataka u rasponu od 131072 znamenke prije decimalne točke do 16383 znamenke nakon decimalne točke |
| numerički | varijabla | Ako ga deklarirate kao broj, možete uključiti broj do 131072 znamenke prije decimalne točke do 16383 znamenke nakon decimalne točke |
| stvarne | 4 bajtova | Preciznost 6 decimalnih znamenki |
| dvostruko | 8 bajtova | Preciznost 15 decimalnih znamenki |
Binarne vrste podataka
Binarni niz je niz okteta ili bajtova. Binarni Postgres tipovi podataka dijele se na dva načina.
- Binarni nizovi omogućuju pohranjivanje vjerojatnosti vrijednosti nula
- Okteti koji se ne mogu ispisati
Nizovi znakova ne dopuštaju nula okteta i također ne dopuštaju bilo koje druge vrijednosti okteta i nizove koji nisu valjani prema pravilima kodiranja skupa znakova baze podataka.
| Ime | Veličina spremišta | Description |
|---|---|---|
| Bajt | 1 do 4 bajta plus veličina binarnog niza | Binarni niz promjenjive duljine |
Vrsta mrežne adrese
Mnoge aplikacije pohranjuju podatke o mreži poput IP adresa korisnika ili senzora. PostgreSQL ima tri izvorne vrste koje vam pomažu optimizirati mrežne podatke.
| Ime | Veličina | Description |
|---|---|---|
| jabukovača | 7 ili 19 bajtova | IPV4 i IPv6 mreže |
| inet | 7 ili 19 bajtova | IPV4 i IPV5 host i mreže |
| macaddr | 6 bajtova | MAC adrese |
Korištenje vrsta mrežnih adresa ima sljedeće prednosti
- Ušteda prostora za pohranu
- Provjera pogrešaka pri unosu
- Funkcije poput pretraživanja podataka po podmreži
Vrsta pretraživanja teksta
PostgreSQL pruža dvije vrste podataka koji su dizajnirani za podršku pretraživanja cijelog teksta. Pretraživanje cijelog teksta je pretraživanje kroz zbirku dokumenata na prirodnom jeziku kako bi se pretražili oni koji najbolje odgovaraju upitu.
- Pretraživanje teksta vektora PostgreSQL tipovi varijabli predstavljaju dokument u obliku optimiziranom za pretraživanje teksta
- Tekstualno pretraživanje vrste upita pohranjuje ključne riječi koje je potrebno pretražiti
Tipovi podataka datum/vrijeme
PostgreSQL vremenska oznaka nudi mikrosekundnu preciznost umjesto sekundne preciznosti. Štoviše, također imate mogućnost pohranjivanja s vremenskom zonom ili bez nje. PostgreSQL pretvorit će vremensku oznaku s vremenskom zonom u UTC na ulazu i pohraniti je.
Unos datuma i vremena prihvaća se u različitim formatima, uključujući tradicionalni Postgres, ISO 8601. SQL kompatibilan itd.
PostgreSQL podržava naručivanje po danu/mjesecu/godini. Podržani formati su DMY, MDY, YMD
Vremenske vrste podataka
| Ime | Veličina | Raspon | Rezolucija |
|---|---|---|---|
| Vremenska oznaka bez vremenske zone | 8 bajtova | 4713. prije Krista do 294276. godine | 1 mikrosekunda/14 znamenki |
| Vremenska oznaka s vremenskom zonom | 8 bajtova | 4713. prije Krista do 294276. godine | 1 mikrosekunda/14 znamenki |
| podaci | 4 bajtova | 4713. prije Krista do 294276. godine | Jednog dana |
| Vrijeme bez vremenske zone | 8 bajtova | 00:00:00 to 24:00:00 | 1 mikrosekunda/14 znamenki |
| Vrijeme s vremenskom zonom | 12 bajtova | 00:00:00 + 1459 do 24:00:00-1459 | 1 mikrosekunda/14 znamenki |
| Interval | 12 bajtova | -178000000 do 178000000 godina | 1 mikrosekunda/14 znamenki |
Primjeri
| Ulazni | Description |
|---|---|
| 2025-09-07 | ISO 8601, 7. rujna s bilo kojim stilom datuma (preporučeni format) |
| 7. rujna 2025. | 7. rujna s bilo kojim stilom datuma |
| 9/7/2025 | 7. rujna s MDY, 9. srpnja s DMY |
| 9/7/25 | 7. rujna 2025., s MDY |
| 2025-rujan-7 | 7. rujna s bilo kojim stilom datuma |
| 7. rujna 2018 | 7. rujna s bilo kojim stilom datuma |
| 7-rujan-25 | 7. rujna 2025., s YMD |
| 20250907 | ISO 8601,7 ruj 20225 u bilo kojem načinu |
| 2025.250 | godina i dan u godini, u ovom slučaju 7. rujna 2025 |
| J25250 | Julijski sastanak |
Vrijeme/ Vrijeme s unosom vremenske zone
| Ulazni | Description |
|---|---|
| 11:19:38.507 11:19:38 11:19 111938 |
ISO 8601 |
| 11: 19 AM | Isto kao 11:19 |
| 11: 19 PM | isto kao 23:19 |
| 23: 19-3 23: 19-03: 00 231900-03 |
ISO 8601, isto kao u 11:19 EST |
| 23: 19 EST | vremenska zona navedena kao EST, isto kao 11:19 EST |
Booleov tip
Booleov tip podataka može sadržavati
- Pravi
- Lažan
- nula
vrijednosti.
Koristite a bool or boolean ključna riječ za deklariranje stupca s Booleovim tipom podataka.
Kada umetnete vrijednosti u booleov stupac, Postgre pretvara vrijednosti poput
- Da
- y
- 1
- t
- istinski
u 1.
Dok vrijednosti poput
- Ne
- N
- 0
- F
- Lažan
pretvaraju se u 0
Prilikom odabira podataka, vrijednosti se ponovno pretvaraju u yes, true, y itd.
Geometrijski tipovi podataka
Geometrijski tipovi podataka predstavljaju dvodimenzionalne prostorne objekte. Pomažu u izvođenju operacija poput rotacije, skaliranja, prevođenja itd.
| Ime | Veličina spremišta | Prikaz | Description |
|---|---|---|---|
| Točka | 16 bajtova | Točka na ravnini | (x,y) |
| Linija | 32 bajtova | Beskonačna linija | ((xl.yl ).(x2.y2)) |
| Lseg | 32 bajtova | Konačni segment | ((xl.yl ).(x2.y2)) |
| Box | 32 bajtova | Pravokutan Box | ((xl.yl ).(x2.y2)) |
| Put | 16n + 16n bajtova | Zatvorite i otvorite put | ((xl.yl),…) |
| Poligon | 40 + 16n bajtova | Poligon | [(xl.yl)….] |
| Krug | 24 bajtova | Krug | <(xy).r> (središnja točka i polumjer) |
Nabrojane vrste
Nabrojano PostgreSQL vrsta podataka korisna je za predstavljanje informacija koje se rijetko mijenjaju, kao što je kod zemlje ili ID podružnice. Tip podataka Enumerated predstavljen je u tablici sa stranim ključevima kako bi se osigurao integritet podataka.
Primjer
Boja kose prilično je statična u demografskoj bazi podataka
CREATE TYPE hair_color AS ENUM
('brown','black','red','grey','blond')
Vrsta dometa
Mnoge poslovne aplikacije zahtijevaju podatke u rasponima. Obično su dva stupca (primjer: datum početka, datum završetka) definirana za obradu raspona. To je i neučinkovito i teško za održavanje.
Postgre je izgradio tipove raspona na sljedeći način
- int4range — Prikaz raspona cijelog broja
- int8range — Prikaz raspona bigint
- numrange — Prikazuje numerički raspon
- tstrange — Pomaže vam prikazati vremensku oznaku bez vremenske zone
- čudno — Omogućuje prikaz vremenske oznake s vremenskom zonom
- datumski raspon — Raspon datuma
Vrsta UUID-a
Universally Unique Identifies (UUID) je 128-bitna veličina koju generira algoritam. Vrlo je mala vjerojatnost da će isti identifikator generirati druga osoba na svijetu koristeći isti algoritam. Zato su za distribuirane sustave ovi identifikatori idealan izbor jer nude jedinstvenost unutar jedne baze podataka. UUID se piše kao skupina malih heksadecimalnih znamenki, s različitim skupinama odvojenim crticama.
PostgreSQL ima izvorni tip podataka UUID koji zauzima 16 bajtova pohrane. UUID je idealan tip podataka za primarne ključeve.
Primjer
d5f28c97-b962-43be-9cf8-ca1632182e8e
Postgre također prihvaća alternativne oblike unosa UUID-a kao što su sva velika slova, bez crtica, zagrada itd.
XML vrsta
PostgreSQL omogućuje pohranjivanje XML podataka u tip podataka, ali nije ništa više od proširenja tekstualnog tipa podataka. Ali prednost je u tome što provjerava je li ulazni XML dobro oblikovan.
Primjer
XMLPARSE (DOCUMENT '<?xml version="1.0"?><tutorial><chapter>Data Type</chapter><chapter>...</chapter></tutorial>')
Vrsta JSON
Za pohranu JSON podataka PostgreSQL nudi 2 vrste podataka
- JSON
- JSONB
| JSON | Jsonb |
|---|---|
| Jednostavno proširenje tekstualnog tipa podataka s JSON provjerom valjanosti | Binarna reprezentacija JSON podataka |
| Umetanje je brzo, ali je dohvaćanje podataka relativno sporo. | Umetanje je sporo, ali odaberite (dohvaćanje podataka je brzo) |
| Sprema unesene podatke točno na način na koji uključuje razmak. | Podržava indeksiranje. Može optimizirati razmak kako bi dohvaćanje bilo brže. |
| Ponovna obrada pri dohvaćanju podataka | Nije potrebna ponovna obrada pri dohvaćanju podataka |
Najčešće korišteni JSON tip podataka koristio nas je jsonb osim ako postoji posebna potreba za korištenjem JSON tipa podataka.
Primjer
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-tipovi
PostgreSQL ima mnogo unosa posebne namjene koji se nazivaju pseudo-tipovi. Ne možete koristiti pseudo-tipove kao PostgreSQL vrste stupaca. Koriste se za deklariranje argumenta funkcije ili vrste povrata.
Svaki od dostupnih pseudotipova je od pomoći u situacijama u kojima dokumenti o ponašanju funkcije ne odgovaraju jednostavnom preuzimanju ili vraćanju vrijednosti određene SQL vrsta podataka.
| Ime | Description |
|---|---|
| bilo koji | Funkcija prihvaća sve vrste ulaznih podataka. |
| Niz | Funkcija prihvaća bilo koji tip podataka niza. |
| Bilo koji element | Funkcija prihvaća bilo koju vrstu podataka. |
| Bilo koji popis | Funkcija prihvaća bilo koji tip podataka enum. |
| Nonarray | Funkcija prihvaća bilo koji tip podataka koji nije niz. |
| Cstring | Funkcija prihvaća ili vraća C niz koji završava nulom. |
| interni | Interna funkcija prihvaća ili vraća interni tip podataka poslužitelja. |
| Rukovatelj_jezikom | Deklarirano je da vraća rukovatelja jezikom. |
| Zapis | Pronađite funkciju koja vraća neodređenu vrstu retka. |
| Okidač | Funkcija okidača koristi se za vraćanje okidača. |
Važno je da korisnik koji koristi ovu funkciju mora biti siguran da će se funkcija ponašati sigurno kada se pseudotip koristi kao tip argumenta.
Najbolje prakse za korištenje tipova podataka
- Koristite tip podataka "tekst" osim ako ne želite ograničiti unos
- Nikada nemojte koristiti "char".
- Cijeli brojevi koriste "int." Koristite bigint samo kada imate stvarno velike brojeve
- Koristite "numeric" gotovo uvijek
- Koristite float in PostgreSQL ako imate IEEE 754 izvor podataka
Rezime
- PostgreSQL nudi bogat skup izvornih tipova podataka za korisnike
- PostgreSQL podržava karakterne tipove podataka za pohranu tekstualnih vrijednosti
- PostgreSQL podržava dvije različite vrste brojeva: 1. cijele brojeve, 2. brojeve s pomičnim zarezom
- Binarni niz je niz bajtova ili okteta
- PostgreSQL ima vrstu mrežne adrese koja vam pomaže optimizirati pohranu mrežnih podataka
- Pretraživanje teksta PostgreSQL strukture podataka dizajnirane su za podršku pretraživanja cijelog teksta
- Datum/vrijeme PSQL tipovi podataka dopuštaju informacije o datumu i vremenu u različitim formatima
- Tipovi polja Boolean Postgres mogu sadržavati tri vrijednosti 1. True 2. False 3. Null
- Geometrijski PostgreSQL tipovi podataka predstavljaju dvodimenzionalne prostorne objekte
- Nabrojane vrste podataka u PostgreSQL koristan je za predstavljanje informacija koje se rijetko mijenjaju, kao što je kod zemlje ili ID podružnice
- Universally Unique Identifies (UUID) je 128-bitna veličina koju generira algoritam
- PostgreSQL ima mnogo unosa posebne namjene koji se nazivaju pseudo-tipovi
- Najbolja je praksa koristiti vrstu podataka "tekst" osim ako ne želite ograničiti unos
