PostgreSQL
PostgreSQL je open-source objektovo-relačná databáza, ktorá kombinuje silu tradičného SQL s rozšírenými typmi dát — JSON, arrays, full-text search, geospatial — a považuje sa za najvyspelejšiu open-source databázu svojej kategórie.
Ako to funguje
PostgreSQL (alebo jednoducho Postgres) existuje od roku 1996 a za tú dobu si vybudoval reputáciu databázy, ktorej možno veriť. Nie je to marketingový slogan — Postgres dodržiava ACID vlastnosti (Atomicita, Konzistentnosť, Izolácia, Trvanlivosť) dôsledne a jeho správanie je predvídateľné. Keď transakcia prebehne, dáta sú tam. Keď zlyhá, vrátia sa do pôvodného stavu. Pre finančné systémy, zdravotné záznamy, alebo akékoľvek dáta, kde záleží na konzistentnosti, je toto základná podmienka.
Typový systém Postgres je výnimočne bohatý. Okrem štandardných typov (integer, text, timestamp, decimal) podporuje natívne JSON a JSONB (binárne JSON s indexovaním), arrays, hstore (key-value), UUID, inet (IP adresy), range typy a geometrické typy cez PostGIS. V praxi to znamená, že mnohé problémy, pre ktoré by ste siahli po Redis alebo Elasticsearch, Postgres zvládne natívne — full-text search, geospatial dotazy, semi-štruktúrované dáta.
Výkonnosť Postgres závisí od správneho indexovania. B-tree index je default, ale Postgres podporuje aj GIN (pre JSON a full-text), GiST (pre geometrické dáta), BRIN (pre časové rady), partial indexy (index len nad podmnožinou riadkov) a expression indexy. EXPLAIN ANALYZE vám ukáže, ako Postgres vykoná dotaz, a je to najdôležitejší nástroj pre ladenie výkonu. Väčšina výkonnostných problémov sa rieši pridaním správneho indexu alebo prepisom dotazu, nie zmenou databázy.
Postgres má výbornú replikáciu (streaming replication, logical replication pre selektívne replikáciu), connection pooling cez PgBouncer a výborný ekosystém managed hosting služieb — Supabase, Neon, Railway, RDS. Pre väčšinu projektov je managed Postgres najrozumnejšia voľba: zálohy, high availability a aktualizácie riešia za vás.
Z našej praxe
PostgreSQL je štandardná databáza v Strange Loops — používame ho na všetkých produkčných projektoch: SylvoRehab (zdravotné záznamy), QualiTravel (rezervačný systém s komplexnými vzťahmi medzi letmi, hotelmi a zákazníkmi), Ovulogy (cyklické dáta s časovými radmi). Pristupujeme k nemu cez Drizzle ORM, ktorý nám dáva typovú bezpečnosť bez straty flexibility pri komplexných dotazoch. Connection pooling riešime cez PgBouncer na DigitalOcean Managed PostgreSQL — výpadok databázy by bol pre klientov neprijateľný, preto vždy volíme managed variantu s automatickým failoverom.
Kedy to potrebujete
- Budujete systém, kde konzistentnosť dát je kritická — účtovníctvo, zdravotné záznamy, objednávky — a nemôžete si dovoliť stratu ani nekonzistenciu.
- Potrebujete full-text vyhľadávanie v dokumentoch alebo produktoch a nechcete zavádzať Elasticsearch len pre túto funkciu.
- Vaša aplikácia spracúva geografické dáta — lokácie, oblasti, vzdialenosti — PostGIS rozšírenie robí z Postgres geospatial databázu.
- Máte relačné dáta s komplexnými vzťahmi a chcete použiť jeden systém namiesto kombinácie SQL + Redis + dokumentovej databázy.
Najčastejšie otázky
Prečo PostgreSQL namiesto MySQL?
Obe sú solídne produkčné databázy. PostgreSQL má bohatší typový systém, lepšiu podporu JSON, striktnejší ACID compliance a výkonnejší query planner pre komplexné dotazy. MySQL je historicky rýchlejší pri jednoduchých read operáciách a má širšiu podporu u legacy hosting providerov. Pre nové projekty dnes väčšina vývojárov volí PostgreSQL.
Je PostgreSQL škálovateľný pre veľké objemy dát?
Áno — Postgres bez problémov zvláda desiatky terabajtov dát s správnym indexovaním a partitioningom. Tabuľkový partitioning rozdeľuje veľké tabuľky na menšie časti (napríklad podľa roku), čo dramaticky zrýchľuje dotazy. Horizontálne škálovanie cez Citus rozšírenie umožňuje distribuovaný Postgres naprieč viacerými uzlami.
Čo je connection pooling a prečo ho potrebujem?
Každé pripojenie k Postgres zaberá pamäť a CPU. Ak vaša aplikácia otvára nové pripojenie pre každý request, pri väčšej záťaži databáza dostane stovky súbežných spojení a začne sa dusiť. Connection pooler (PgBouncer) udržuje malý pool otvorených pripojení a recykluje ich — aplikácia si myslí, že má vlastné spojenie, ale v skutočnosti zdieľa niekoľko skutočných.
Súvisiace pojmy
Drizzle ORM
Drizzle ORM je lightweight TypeScript ORM pre relačné databázy, ktorý sa odlišuje tým, že zachováva SQL ako prvý jazyk — schéma, dotazy aj migrácie píšete v TypeScripte, ale výsledok je vždy predvídateľný SQL, ktorý vidíte a kontrolujete.
tRPC
tRPC je framework, ktorý umožňuje volať serverové funkcie z frontendu s plnou typovou bezpečnosťou — bez generovania kódu, bez REST schém, bez manuálnej synchronizácie typov. TypeScript overí správnosť volania pri kompilácii.
Docker
Docker je platforma na kontajnerizáciu — zabalenie aplikácie spolu s jej závislosťami, konfiguráciou a runtime prostredím do prenositeľného kontajnera, ktorý beží identicky na laptope vývojára, CI serveri aj v produkcii.
Potrebujete s tým pomôcť?
Ak riešite niečo z toho, čo tu opisujeme, ozvite sa. Povieme vám, či a ako vieme pomôcť.