Files
knowledge-base/POSTGRESQL.md
Stanislav Hubacek 95d1839f05 First batch
2026-06-11 15:27:28 +02:00

8.0 KiB

🐘 PostgreSQL

Přehled

PostgreSQL je nejpokročilejší open-source relační databáze s důrazem na rozšiřitelnost, standardy SQL a spolehlivost. Vývoj od 1996, silná komunita, aktivní release cyklus (major verze každý rok).

Architektura

Procesový model

Postmaster (supervisor)
    ├── Backend process (1 per connection)
    ├── WAL writer
    ├── Checkpointer
    ├── Autovacuum launcher
    ├── Stats collector
    ├── Logical replication launcher
    └── Archiver (WAL archiving)

Každé spojení = vlastní OS proces (ne vlákno). Výhoda: izolace, stabilita. Nevýhoda: vyšší memory footprint u tisíců spojení → nutný connection pooler (PgBouncer).

MVCC (Multi-Version Concurrency Control)

Každá transakce vidí snapshot dat z okamžiku startu. Staré verze řádků (tuple) zůstávají v tabulce:

  • INSERT vytvoří nový tuple s xmin = current_xid
  • DELETE označí tuple xmax = current_xid (nezmizí hned)
  • UPDATE = DELETE old + INSERT new
  • VACUUM fyzicky maže tuple starší než nejstarší aktivní snapshot

VACUUM a autovacuum

Parametr Popis Výchozí
autovacuum_vacuum_threshold Min. mrtvých řádků pro spuštění 50
autovacuum_vacuum_scale_factor % z tabulky jako threshold 0.2 (20 %)
autovacuum_analyze_threshold Min. změněných řádků pro ANALYZE 50
autovacuum_vacuum_cost_limit Limituje I/O vacuum (prevence zátěže) 200
autovacuum_naptime Interval mezi kontrolami 1 min
deadlock_timeout Detekce deadlocků 1 s

Příznaky nedostatečného vacuum: růst tabulky (bloat), zhoršení výkonu index scanů, XID wraparound hazard.

WAL (Write-Ahead Log)

Append-only log všech změn pro crash recovery a replikaci:

wal_level = replica                 # nebo logical
archive_mode = on
archive_command = 'aws s3 cp %p s3://backups/pg-wal/%f'

PITR (Point-In-Time Recovery):

  1. Restore base backup (pg_basebackup)
  2. Replay WAL archivů až k cílovému času
  3. recovery_target_time = '2026-06-03 10:30:00 UTC'

Replication slots

  • Physical — zaručuje, že WAL není smazán masterem, dokud ho replica nespotřebuje
  • Logical — pro logickou replikaci (selektivní tabulky, transformace dat)
  • Riziko: pokud replica spadne, WAL naroste na disku (disk full)
  • Monitoring: pg_replication_slots, pg_stat_replication

Konfigurace

Hlavní soubory (dle Obe & Hsu):

  • postgresql.conf — paměť, síť, logování, storage
  • pg_hba.conf — přístupová práva
  • pg_ident.conf — mapování OS uživatelů na PostgreSQL role

AI-Ready PostgreSQL 18

(Kumar, Linster, 2026) — PostgreSQL 18 jako unified platform pro transakce, analytiku a AI:

Oblast Technika
Vektory pgvector — embeddingy přímo v řádcích tabulky
Hybridní pattern Semantic recall → SQL filtrování
LLM integrace PostgreSQL + MCP (Model Context Protocol)
Embedding pipeline Batch i stream generování embeddingů

Hybridní dotaz:

SELECT p.*, pm.name
FROM products p
JOIN product_embeddings pe ON p.id = pe.product_id
WHERE pe.embedding <-> '[0.1, 0.3, ...]' < 0.8
  AND p.in_stock = true
  AND p.price < 100.00
ORDER BY pe.embedding <-> '[0.1, 0.3, ...]'
LIMIT 10;

Rozšíření (extensions)

Extension Účel
pgvector Vektorové vyhledávání pro AI/embeddings
PostGIS Geografická data, prostorové dotazy
pg_stat_statements Monitoring výkonu dotazů
pg_duckdb Analytické dotazy (DuckDB engine uvnitř PG)
pg_search Full-text a hybridní vyhledávání
pg_cron Scheduling úloh v DB
citus Horizontální škálování (sharding)
timescaledb Time-series optimalizace
pgaudit Auditní logování

Connection pooling

Pooler Typ Protokol
PgBouncer Proxy (transaction/session) PostgreSQL wire
Odyssey Proxy (multithreaded) PostgreSQL wire
pgpool-II Proxy (replication, load balancing) PostgreSQL wire
RDS Proxy Managed proxy (AWS) PostgreSQL wire

PgBouncer režimy:

  • Session pooling — spojení drženo po celou dobu session (aplikace) → overhead
  • Transaction pooling — spojení vráceno po dokončení transakce → efektivnější (vyžaduje bezstavovost)

Doporučení — v čem je PostgreSQL lepší

Oblast PostgreSQL Konkurence Proč PG
Rozšiřitelnost Extensions, custom types, operators, index methods MySQL omezené Lze přidat cokoliv od vektorů po full-text v DB
SQL standard Nejbližší ANSI SQL MySQL odbočky (GROUP BY, ALTER TABLE) Přenositelnost, méně překvapení
Geoprostorová data PostGIS (zlatý standard GIS) MySQL GIS (omezený) Jediná reálná open-source volba pro GIS
Konzistence SSI serializable, foreign keys, CHECK, exclusions MySQL MyISAM bez FK, InnoDB jen RC Vhodné pro finanční a kritické systémy
Concurrent读写 MVCC bez reader/writer blokování MySQL InnoDB reader blokuje writer (a naopak) u starších verzí Lepší škálovatelnost čtení
AI/vektory pgvector nativně v DB Samostatná vektorová DB (zvýšení latence) Hybridní dotazy v jediném SQL
Licence PostgreSQL license (MIT-like) MySQL dvojí licence (Oracle) Žádná vendor lock-in

Kdy použít PostgreSQL

  • Enterprise aplikace — vyžadují ACID, referenční integritu, komplexní transakce
  • Geografické systémy — GIS, mapové aplikace, lokalitní služby
  • Finanční systémy — účetnictví, banking, compliance (audit logging, SSI)
  • AI / RAG aplikace — hybridní vektorové + relační dotazy v jedné DB
  • Analytika na relačních datech — pg_duckdb, materializované views, window functions
  • Multi-tenant aplikace — row-level security, schemas per tenant

PostgreSQL licensing

Varianta Licence Cena Omezení
PostgreSQL PostgreSQL license (MIT-like) $0 Žádná — lze používat, modifikovat, distribuovat v komerčních produktech. Není potřeba žádný "commercial license"
Amazon Aurora PostgreSQL Proprietary (AWS) ~$0.10-1.00/hod AWS managed, PostgreSQL compatible. AWS smí používat PG kód díky PostgreSQL license
YugabyteDB Apache 2.0 $0 (core) PostgreSQL kompatibilní distributed SQL, postaveno na PG query layer
TimescaleDB Apache 2.0 (community) / Timescale License (enterprise) $0 (community) Časově řadová rozšíření PostgreSQL. Enterprise: tiered storage, compression, multi-node

Klíčové: PostgreSQL license je jedna z nejliberálnějších — umožňuje cloud providerům (AWS, GCP, Azure) nabízet PostgreSQL jako managed službu bez omezení. To je rozdíl oproti MongoDB (SSPL) a Redis (RSALv2). Díky tomu má PostgreSQL nejširší cloud podporu ze všech databází.

Dopad na výběr: Žádný license risk, žádný vendor lock-in, žádné skryté náklady. PostgreSQL je bezpečná volba pro jakýkoliv projekt.

Kdy použít něco jiného

  • Jednoduchý web / blog → SQLite (v embedded scénáři lehčí)
  • High-throughput key-value → Redis (o řád nižší latence)
  • Time-series v masivním měřítku → TimescaleDB, InfluxDB
  • Globálně distribuovaná data → CockroachDB, Spanner
  • Full-text search primárně → Elasticsearch

Zdroje

Odkazy, knihy a standardy: sources/databases/sources.md

Doporučená literatura

Kniha Autoři ISBN Popis
PostgreSQL: Up and Running (3rd ed.) Regina Obe, Leo Hsu 978-1491962935 Praktický průvodce administrací, konfigurací a extensions
AI-Ready PostgreSQL 18 Kumar, Linster PostgreSQL jako unified platform pro AI workloads

Poslední revize: 2026-06-03