PostgreSQL – Adattípusok

Hirdetések

Ebben a fejezetben a PostgreSQL-ben használt adattípusokról lesz szó. Táblázat létrehozásakor minden oszlophoz megadunk egy adattípust, azaz, hogy milyen adatokat szeretnénk tárolni a tábla mezőiben.

Ez több előnyt is lehetővé tesz –

  • Konzisztencia – Az azonos adattípusú oszlopokkal végzett műveletek konzisztens eredményeket adnak, és általában a leggyorsabbak.

  • Validálás – Az adattípusok megfelelő használata az adatok formátumának érvényesítését és az adattípus hatókörén kívül eső adatok elutasítását jelenti.

  • Tömörség – Mivel egy oszlop egyetlen értéktípust tárolhat, ezért kompakt módon tárolható.

  • Teljesítmény – Az adattípusok megfelelő használata az adatok leghatékonyabb tárolását biztosítja. A tárolt értékek gyorsan feldolgozhatók, ami növeli a teljesítményt.

A PostgreSQL az adattípusok széles körét támogatja. Emellett a felhasználók a CREATE TYPE SQL paranccsal saját egyéni adattípust is létrehozhatnak. Az adattípusoknak különböző kategóriái vannak a PostgreSQL-ben. Ezeket az alábbiakban tárgyaljuk.

Numerikus típusok

A numerikus típusok kétbájtos, négybájtos és nyolcbájtos egész számokból, négybájtos és nyolcbájtos lebegőpontos számokból, valamint választható pontosságú tizedesjegyekből állnak. A következő táblázat felsorolja a rendelkezésre álló típusokat.

Név Tárolási méret Megnevezés Tartomány
smallint 2 byte small-range integer -32768 to +32767
integer 4 bytes typical choice for integer -2147483648 és +2147483647
bigint 8 byte nagy tartományú egész szám -9223372036854775808 – 9223372036854775807
decimális változó felhasználó által megadott pontosság,exact legfeljebb 131072 számjegyig a tizedesvessző előtt; legfeljebb 16383 számjegy a tizedespont után
numerikus változó felhasználó által megadott pontosság, exact a tizedespont előtt legfeljebb 131072 számjegyig; legfeljebb 16383 számjegy a tizedespont után
reális 4 bájt változó pontosságú,pontatlan 6 tizedesjegy pontosság
dupla pontosság 8 bájt változó pontosságú,inexact 15 tizedesjegy pontosság
smallserial 2 byte small autoincrementing. integer 1-től 32767-ig
serial 4 byte autoincrementing integer 1 214748483647
bigserial 8 byte large autoincrementing integer 1 to 9223372036854775807

Monetary Types

A pénz típus egy pénzösszeget tárol fix tört pontossággal. A numeric, int és bigint adattípusok értékei pénzzé alakíthatók. A lebegőpontos számok használata nem ajánlott a pénz kezelésére a kerekítési hibák lehetősége miatt.

Név Tárolási méret leírás tartomány
pénz 8 bájt pénzösszeg -92233720368547758.08 és +92233720368547758.07

Karaktertípusok

Az alábbi táblázat a PostgreSQL-ben elérhető általános célú karaktertípusokat tartalmazza.

S. No. Név & Leírás
1

karakter változó(n), varchar(n)

variable-length with limit

2

character(n), char(n)

fixed-length, blank padded

3

text

változó korlátlan hosszúságú

Bináris adattípusok

A bytea adattípus az alábbi táblázat szerinti bináris karakterláncok tárolását teszi lehetővé.

Név Tárolási méret Megnevezés
bytea 1 vagy 4 bájt plusz a tényleges bináris string változó-hosszú bináris karakterlánc

Dátum/idő típusok

A PostgreSQL támogatja az SQL dátum és idő típusok teljes készletét, ahogyan az az alábbi táblázatban látható. A dátumokat a Gergely-naptár szerint számoljuk. Itt minden típus felbontása 1 mikroszekundum / 14 számjegy, kivéve a dátumtípust, amelynek felbontása nap.

Név Tárolási méret leírás alacsony érték magas érték
időbélyeg 8 byte mind a dátum és az idő (nincs időzóna) 4713 BC 294276 AD
TIMESTAMPTZ 8 byte mind a dátum és az idő, időzónával 4713 BC 294276 AD
date 4 byte date (no time of day) 4713 BC 5874897 AD
time 8 byte time of day (no date) 00:00:00 24:00:00
időzónával 12 bájt csak napszak, időzónával 00:00:00+1459 24:00:00-1459
intervallum 12 bájt időintervallum -178000000 év 178000000 év

Boolean típus

A PostgreSQL a standard SQL Boolean típust biztosítja. A Boolean adattípusnak lehetnek true, false és egy harmadik állapota, az ismeretlen, amelyet az SQL null értéke képvisel.

.

Név Tárolási méret leírás
boolean 1 byte az igaz vagy hamis állapota

A felsorolásos típus

A felsorolásos (enum) típusok olyan adattípusok, amelyek egy statikus, értékek rendezett halmazából állnak. Ezek megfelelnek a számos programozási nyelvben támogatott enum típusoknak.

A többi típustól eltérően az enumerált típusokat a CREATE TYPE paranccsal kell létrehozni. Ez a típus statikus, rendezett értékkészlet tárolására szolgál. Például iránytű irányok, azaz ÉSZAK, DÉL, KELET és NYUGAT, vagy a hét napjai, mint az alábbiakban látható –

CREATE TYPE week AS ENUM ('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');

A felsorolásos, miután létrehoztuk, ugyanúgy használható, mint bármely más típus.

Geometrikus típus

A geometrikus adattípusok kétdimenziós térbeli objektumokat ábrázolnak. A legalapvetőbb típus, a pont képezi az alapját az összes többi típusnak.

Név Tárolási méret Reprezentáció leírás
pont 16 bájt pont a síkon (x,y)
vonal 32 bájt Végtelen vonal (nem teljesen implementálva) ((x1,y1),(x2,y2))
lseg 32 byte Véges vonalszakasz ((x1,y1),(x2,y2))
box 32 byte Téglalap alakú doboz ((x1,y1),(x2,y2))
útvonal 16+16n bájt Zárt útvonal (poligonhoz hasonló) ((x1,y1),…)
útvonal 16+16n bájt nyitott útvonal
poligon 40+16n Poligon (zárt útvonalhoz hasonló) ((x1,y1),….)
kör 24 bájt Kör <(x,y),r> (középpont és sugár)

Hálózati cím típusa

A PostgreSQL az IPv4, IPv6 és MAC címek tárolására kínál adattípusokat. A hálózati címek tárolására jobb ezeket a típusokat használni a sima szöveges típusok helyett, mert ezek a típusok bemeneti hibaellenőrzést és speciális operátorokat és függvényeket kínálnak.

Név Tárolási méret Megnevezés
cidr 7 vagy 19 bájt IPv4 és IPv6 hálózatok
inet 7 vagy 19. bájt IPv4 és IPv6 hosztok és hálózatok
macaddr 6 bájt MAC-címek

Bit String Type

A bitmaszkok tárolására a Bit String Types szolgálnak. Ezek vagy 0 vagy 1 értékűek. Két SQL bit típus létezik: bit(n) és bit varying(n), ahol n egy pozitív egész szám.

Text Search Type

Ez a típus támogatja a teljes szöveges keresést, amely a természetes nyelvű dokumentumok gyűjteményében való keresést jelenti a lekérdezésnek leginkább megfelelő dokumentumok megtalálása érdekében. Ehhez két adattípus létezik –

S. No. Név & Leírás
1

tsvektor

Ez egy rendezett lista különböző szavakból, amelyeket normalizáltak, hogy egyesítsék ugyanazon szó különböző változatait, az úgynevezett “lexémákat”.

2

tsquery

Ez tárolja a keresendő lexémákat, és a Boolean operátorok & (AND), | (OR), és a ! (NOT). Az operátorok csoportosítását zárójelekkel lehet kikényszeríteni.

UUID Type

A UUID (Universally Unique Identifiers) kisbetűs hexadecimális számjegyek sorozataként íródik, több, kötőjellel elválasztott csoportban, konkrétan egy nyolcjegyű csoport, majd három négyjegyű csoport, majd egy 12jegyű csoport, összesen 32 számjegy, ami 128 bitet jelent.

Egy UUID példa: – 550e8400-e29b-41d4-a716-446655440000

XML típus

Az XML adattípus XML adatok tárolására használható. XML adatok tárolásához először XML értékeket kell létrehozni az xmlparse függvény segítségével az alábbiak szerint –

XMLPARSE (DOCUMENT '<?xml version="1.0"?><tutorial><title>PostgreSQL Tutorial </title> <topics>...</topics></tutorial>')XMLPARSE (CONTENT 'xyz<foo>bar</foo><bar>foo</bar>')

JSON Type

A json adattípus JSON (JavaScript Object Notation) adatok tárolására használható. Az ilyen adatok szövegként is tárolhatók, de a json adattípusnak megvan az az előnye, hogy ellenőrzi, hogy minden tárolt érték érvényes JSON-érték-e. Vannak kapcsolódó támogató függvények is, amelyek közvetlenül használhatók a JSON adattípus kezelésére az alábbiak szerint.

Példa Példa Eredmény
array_to_json(‘{{1,5},{99,100}}’::int) ,]
row_to_json(row(1,’foo’)) {“f1”:1, “f2”: “foo”}

Tömb típus

A PostgreSQL lehetőséget ad arra, hogy egy táblázat oszlopát változó hosszúságú többdimenziós tömbként definiáljuk. Bármilyen beépített vagy felhasználó által definiált alaptípus, enum típus vagy összetett típusú tömbök hozhatók létre.

Tömbök deklarálása

A tömb típus deklarálható

CREATE TABLE monthly_savings ( name text, saving_per_quarter integer, scheme text);

vagy az “ARRAY” kulcsszó használatával

CREATE TABLE monthly_savings ( name text, saving_per_quarter integer ARRAY, scheme text);

Értékek beillesztése

A tömb értékeit szó szerinti konstansként lehet beilleszteni, az elemértékeket szögletes zárójelek közé zárva és vesszővel elválasztva. Egy példa az alábbiakban látható –

INSERT INTO monthly_savings VALUES ('Manisha', '{20000, 14600, 23500, 13250}', '{{"FD", "MF"}, {"FD", "Property"}}'); 

Tömbök elérése

Egy példa a tömbök elérésére az alábbiakban látható. Az alábbi parancs kiválasztja azokat a személyeket, akiknek a második negyedévben több a megtakarításuk, mint a negyedik negyedévben.

SELECT name FROM monhly_savings WHERE saving_per_quarter > saving_per_quarter;

Tömbök módosítása

A tömbök módosítására az alábbi példa látható.

UPDATE monthly_savings SET saving_per_quarter = '{25000,25000,27000,27000}'WHERE name = 'Manisha';

vagy az ARRAY kifejezés szintaxisának használatával –

UPDATE monthly_savings SET saving_per_quarter = ARRAYWHERE name = 'Manisha';

Tömbök keresése

A tömbök keresésére az alábbi példa látható.

SELECT * FROM monthly_savings WHERE saving_per_quarter = 10000 ORsaving_per_quarter = 10000 ORsaving_per_quarter = 10000 ORsaving_per_quarter = 10000;

Ha a tömb mérete ismert, akkor a fenti keresési módszer használható. Ellenkező esetben a következő példa azt mutatja, hogyan kell keresni, ha a méret nem ismert.

SELECT * FROM monthly_savings WHERE 10000 = ANY (saving_per_quarter);

Kompozit típusok

Ez a típus a mezőnevek és adattípusaik listáját jelenti, azaz, egy táblázat sorának vagy rekordjának szerkezetét.

A kompozit típusok deklarálása

A következő példa mutatja, hogyan kell deklarálni egy kompozit típust

CREATE TYPE inventory_item AS ( name text, supplier_id integer, price numeric);

Ez az adattípus az alábbi módon használható a táblázatok létrehozásában –

CREATE TABLE on_hand ( item inventory_item, count integer);

Kompozit értékbevitel

A kompozit értékeket szó szerinti konstansként lehet beírni, a mezőértékeket zárójelek közé zárva és vesszővel elválasztva. Egy példa az alábbiakban látható –

INSERT INTO on_hand VALUES (ROW('fuzzy dice', 42, 1.99), 1000);

Ez a fent definiált inventory_itemre érvényes. A ROW kulcsszó valójában opcionális, amennyiben a kifejezésben egynél több mező szerepel.

Az összetett típusok elérése

Az összetett oszlop valamelyik mezőjének eléréséhez használjunk pontot, amelyet a mező neve követ, hasonlóan ahhoz, mintha a táblázat nevéből választanánk ki egy mezőt. Például az on_hand példatáblánk néhány almezőjének kiválasztásához a lekérdezés az alábbi módon történne –

SELECT (item).name FROM on_hand WHERE (item).price > 9.99;

A táblázat nevét is használhatja (például egy multitable lekérdezésben), például így –

SELECT (on_hand.item).name FROM on_hand WHERE (on_hand.item).price > 9.99;

Tartománytípusok

A tartománytípusok olyan adattípusokat jelentenek, amelyek egy adattartományt használnak. A tartománytípusok lehetnek diszkrét tartományok (pl. az összes egész számérték 1-től 10-ig) vagy folytonos tartományok (pl, bármely időpont 10:00 és 11:00 között).

A beépített…rendelkezésre álló beépített tartománytípusok közé tartoznak a következő tartományok –

  • int4range – Egész szám tartomány

  • int8range – Bigint tartomány

  • numrange – Numerikus tartomány

  • tsrange –

  • tsrange. Range of timestamp without time zone

  • tstzrange – Range of timestamp with time zone

  • daterrange – Range of date

Custom range types can be created to make new types of range available, például IP-címtartományok az inet típust használva alapként, vagy lebegőszám-tartományok a float adattípust használva alapként.

A tartománytípusok támogatják az inkluzív és exkluzív tartományhatárokat a és ( ) karakterek használatával. Például a ‘[4,9)’ a 4-től kezdődő és a 4-et is magában foglaló, de a 9-et nem tartalmazó összes egész számot jelenti.

Tárgyazonosító típusok

A tárgyazonosítókat (OID) a PostgreSQL belsőleg különböző rendszertáblák elsődleges kulcsaként használja. Ha a WITH OIDS van megadva, vagy a default_with_oids konfigurációs változó engedélyezve van, csak akkor, ilyen esetekben kerülnek OID-k a felhasználó által létrehozott táblákhoz. A következő táblázat több alias típust is felsorol. Az OID alias típusok nem rendelkeznek saját műveletekkel, kivéve a speciális beviteli és kimeneti rutinokat.

Név leírás érték Példa
oid minden numeric objektum azonosító 564182
regproc pg_proc funkció neve sum
regprocedure pg_proc függvény argumentumtípusokkal sum(int4)
regoperator pg_operator operátor neve +
regoperátor pg_operátor operátor argumentumtípusokkal *(integer,integer) vagy -(NONE,integer)
regclass pg_class relation name pg_type
regtype pg_type adattípus neve integer
regconfig pg_ts_config szöveges keresési konfiguráció English
regdictionary pg_ts_dict szöveges keresési szótár simple

Pseudo Types

A PostgreSQL típusrendszer számos speciális-célú bejegyzéseket, amelyeket együttesen pszeudotípusoknak nevezünk. Egy pszeudotípus nem használható oszlop adattípusként, de egy függvény argumentum- vagy eredménytípusának deklarálására használható.

Az alábbi táblázat a létező pszeudotípusokat sorolja fel.

S. No. Név & Leírás
1

any

Jelzi, hogy a függvény bármilyen bemeneti adattípust elfogad.

2

anyelement

Jelzi, hogy a függvény bármilyen adattípust elfogad.

3

anyarray

Jelzi, hogy a függvény bármilyen tömb adattípust elfogad.

4

anynonarray

Jelzi, hogy a függvény bármilyen nem tömbös adattípust elfogad.

5

anyenum

Jelzi, hogy a függvény bármilyen enum adattípust elfogad.

6

anyrange

Jelzi, hogy a függvény bármely tartomány adattípust elfogad.

7

cstring

Jelzi, hogy a függvény nullvégű C stringet fogad el vagy ad vissza.

8

belső

Megjelöli, hogy egy függvény elfogad vagy visszaad egy kiszolgálón belüli adattípust.

9

language_handler

A procedurális nyelvi híváskezelő úgy van deklarálva, hogy visszaadja a language_handler-t.

10

fdw_handler

A foreign-data wrapper handler úgy van deklarálva, hogy az fdw_handler-t adja vissza.

11

record

Egy olyan függvényt azonosít, amely egy meg nem határozott sortípust ad vissza.

12

trigger

Egy trigger függvényt úgy deklaráltak, hogy trigger-t ad vissza.

13

void

Jelzi, hogy egy függvény nem ad vissza értéket.

Hirdetések

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.