PostgreSQL - datové typy

Základem každé efektivně navržené databáze je správná volba datových typů. V tomto článku se ponoříme do světa datových typů v PostgreSQL a ukážeme si, jak je rozumně používat.

Proč jsou datové typy tak důležité?

Volba správného datového typu není jen o tom, aby se data vešla do tabulky. Má přímý vliv na:

  • Výkon - menší datové typy zabírají méně místa na disku a v paměti, což vede k rychlejšímu čtení a zápisu.

  • Integritu dat - datové typy vynucují platnost dat, například zabraňují uložení textu do sloupce s čísly.

  • Funkčnost - některé datové typy mají specifické funkce, které usnadňují práci s daty, jako je například práce s datem a časem.

Rozdělení datových typů

PostgreSQL nabízí bohatou sadu datových typů, které můžeme rozdělit do několika hlavních kategorií.

1. Číselné typy

Tyto typy slouží k ukládání čísel. Výběr závisí na rozsahu a přesnosti, kterou potřebujete.

SMALLINT: Malá celá čísla, ideální pro hodnoty v rozsahu -32 768 až 32 767. Šetří místo.

INTEGER: Standardní celá čísla v rozsahu -2 147 483 648 až 2 147 483 647. Nejčastěji používaný typ pro celá čísla.

BIGINT: Velká celá čísla, vhodná pro jedinečné identifikátory (ID) nebo velmi velké hodnoty.

NUMERIC(p, s) nebo DECIMAL(p, s): Přesná desetinná čísla, kde p je celkový počet cifer a s je počet cifer za desetinnou čárkou. Skvělé pro finanční data.

REAL a DOUBLE PRECISION: Nepřesná desetinná čísla s plovoucí desetinnou čárkou. Vhodné pro vědecká měření, kde menší nepřesnost nevadí.

2. Řetězcové typy

Používají se pro ukládání textových dat.

VARCHAR(n): Ukládá text o maximální délce n. Pokud znáte maximální délku, je to dobrá volba.

TEXT: Ukládá text bez omezení délky. Nejflexibilnější, ale VARCHAR může být v některých případech o něco rychlejší. Obvykle se ale rozdíl neprojeví.

CHAR(n): Ukládá text o pevné délce n. Pokud je text kratší, doplní se mezerami. Používá se zřídka.

3. Datum a čas

PostgreSQL má skvělou podporu pro práci s datem a časem, včetně časových zón.

DATE: Ukládá pouze datum (např. '2025-08-30').

TIME: Ukládá pouze čas.

TIMESTAMP: Ukládá datum i čas.

TIMESTAMPTZ: Doporučený typ - Ukládá datum a čas s informací o časové zóně. PostgreSQL automaticky převádí časy do časové zóny nastavené na serveru.

4. Booleovský typ

BOOLEAN: Ukládá logickou hodnotu true nebo false. Může také nabývat hodnoty NULL. Je efektivní a jednoduchý na použití.

5. Binární typy

BYTEA: Pro ukládání binárních dat, jako jsou obrázky nebo soubory.

6. Speciální typy

JSON a JSONB: Ukládání dat ve formátu JSON. JSONB je binární verze, která je rychlejší pro dotazy, protože data indexuje. Pro většinu případů je doporučený typ JSONB.

UUID: Pro ukládání globálně unikátních identifikátorů. Ideální pro distribuované systémy, kde je potřeba generovat unikátní ID.

ARRAY: Umožňuje ukládat pole hodnot stejného typu v jednom sloupci. Používejte s rozvahou, protože to může komplikovat dotazy. V mnoha případech je lepší řešení vytvořit novou tabulku pro relaci 1:N.

TSVECTOR: Speciální typ pro fulltextové vyhledáván

Praktické použití a tipy

  • Vždy si předem rozmyslete, jaká data budete ukládat. Nepoužívejte TEXT pro sloupce, kde víte, že maximální délka bude malá.

  • Pro finanční data používejte NUMERIC. Nikdy nepoužívejte REAL nebo DOUBLE PRECISION, které jsou nepřesné.

  • Používejte TIMESTAMPTZ pro časové údaje. Vyhnete se tak problémům s časovými zónami při práci s daty z různých míst.

  • Využijte UUID místo BIGINT pro primární klíče, pokud potřebujete generovat ID mimo databázi (například v aplikaci) nebo v distribuovaném prostředí.

Výběr správných datových typů je základním kamenem dobře navržené databáze. Jakmile porozumíte, jak jednotlivé typy fungují, budete schopni navrhovat databázové schémata, která jsou nejen robustní, ale i výkonná.

© Josef Novotný 2025