Preskočiť na obsah
Databáza

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.

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ť.