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):
- Restore base backup (pg_basebackup)
- Replay WAL archivů až k cílovému času
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í, storagepg_hba.conf— přístupová právapg_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