From caefe8f255cb8e7474cdc3b775e840059380eb57 Mon Sep 17 00:00:00 2001 From: Stanislav Hubacek Date: Thu, 11 Jun 2026 13:54:40 +0200 Subject: [PATCH] Delete POSTGRESQL.md --- POSTGRESQL.md | 178 -------------------------------------------------- 1 file changed, 178 deletions(-) delete mode 100644 POSTGRESQL.md diff --git a/POSTGRESQL.md b/POSTGRESQL.md deleted file mode 100644 index c7644a0..0000000 --- a/POSTGRESQL.md +++ /dev/null @@ -1,178 +0,0 @@ -# 🐘 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 - -```text -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: - -```conf -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**: -```sql -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](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*