PostgreSQL
Secțiune • Database Strategy

PostgreSQL

Articole PostgreSQL: EXPLAIN ANALYZE, optimizare query-uri, pg_stat_statements, indecși GIN/B-tree, VACUUM, autovacuum, ROLE, GRANT și best practices.

7 articole publicate în această secțiune

Am văzut PostgreSQL în producție cu shared_buffers la 128MB pe mașini cu 256GB de RAM — “pentru că am urmat default-ul”. Am văzut autovacuum dezactivat pentru că “încetinea sistemul”, iar trei luni mai târziu o tabelă de 500 de milioane de rânduri cu 80% bloat și interogări care nu se mai terminau. Am văzut replici streaming rupte în tăcere de săptămâni, și ne-am dat seama doar când master-ul a căzut și failover-ul nu a pornit.

Și am văzut exact opusul: clustere Postgres care susțin mii de conexiuni concurente, gestionează terabytes de date și supraviețuiesc la upgrade-uri majore fără un minut de downtime perceput.

Diferența nu este în cod. Este în cine a avut curajul să atingă default-urile în loc să le îndure.


PostgreSQL nu este doar o bază de date open source. Este rezultatul a aproape patru decenii de evoluție academică și industrială.

Născut în 1986 la Universitatea Berkeley ca evoluție a Ingres, proiectul POSTGRES a introdus concepte care pe atunci erau avangardiste: extensibilitate, tipuri de date personalizate, reguli și un model relațional avansat. În 1996 a apărut suportul SQL iar numele a devenit PostgreSQL. Lumea, însă, a continuat să îi spună simplu “Postgres”. Și e perfect în regulă așa.

După douăzeci de ani de lucru cu el, un lucru am învățat: PostgreSQL îl răsplătește pe cel care îl studiază și îl pedepsește pe cel care îl lasă pe default-uri. Este un motor conceput să fie tunat, nu instalat și uitat. Presupunerile din dezvoltare sunt demontate de realitatea producției:

  • VACUUM și autovacuum nu sunt opționale — sunt ca spălatul pe dinți
  • shared_buffers la default-ul de 128MB este rezonabil doar pe un laptop
  • work_mem setat greșit înmulțit cu conexiunile active îți provoacă un OOM în cel mai prost moment
  • Replicile au nevoie de monitoring activ — streaming-ul se rupe în tăcere
  • Extensiile pot schimba comportamentul catalogului și bloca upgrade-urile

🔧 Parametrii pe care nu îi las niciodată pe default #

Când pun în producție un cluster Postgres, sunt cinci parametri pe care nu îi las niciodată la valoarea de fabrică. Nu pentru că default-ul ar fi greșit în mod absolut, ci pentru că e gândit să ruleze oriunde — și “oriunde” nu este niciodată mașina ta de producție.

ParametruCe regleazăCum îl setez
shared_buffersCache-ul partajat al PostgresDe obicei 25% din RAM — nu mai mult, cache-ul filesystem-ului face restul
effective_cache_sizeCe crede planner-ul că este în cache50-75% din RAM — nu alocă nimic, influențează alegerile optimizatorului
work_memMemorie pentru sort și hash pe operațieMic (4-16MB) dacă sunt multe conexiuni, mare doar pentru încărcări analitice dedicate
autovacuum_*Curățarea automată a dead tuplesNiciodată dezactivat. Eventual tunat (naptime, cost_limit) pentru a fi mai agresiv pe tabele calde
wal_level + max_wal_sendersDetaliul WAL, slot-uri pentru replicireplica sau logical după caz, senders dimensionați pe replicile reale plus marjă

Cinci parametri. Douăzeci de minute de analiză. Luni de probleme de performanță evitate.


📚 Despre ce vorbesc aici #

Povești reale și alegeri tehnice pe PostgreSQL în producție. Arhitectură, VACUUM și bloat, tuning de parametri, replicare streaming și logică, strategii de upgrade, backup-uri cu pg_basebackup și WAL archiving, extensii care chiar ajută (și cele care se puteau evita).

Fără rețete preambalate. Doar ce am văzut funcționând pe medii reale — postal, bănci, administrație publică, telco — unde Postgres susține mii de instanțe în paralel și nu își poate permite aproximări.


A alege PostgreSQL nu înseamnă doar a alege o bază de date open source.

Înseamnă a alege un motor conceput pentru a fi extins, analizat și înțeles — și a accepta că fără puțin studiu default-urile nu te vor duce departe.

Ultimele articole

PostgreSQL
Recomandat

ENUM în PostgreSQL: când alegerea merită, și când te costă scump

PostgreSQL ENUM vs CHECK vs tabel lookup: ALTER TYPE ADD VALUE nu costă nimic, eliminarea unei valori costă o migrare. Trei drumuri, un caz telco real.

9 June 2026 13 min
Alte articole din secțiune
Când un index face mai mult rău decât bine: curățarea PostgreSQL de risipă
PostgreSQL

Când un index face mai mult rău decât bine: curățarea PostgreSQL de risipă

PostgreSQL: cum găsești și elimini indecșii nefolosiți cu pg_stat_user_indexes. Caz real: tabel cu 15 indecși, 8 nefolosiți niciodată.

pg_stat_statements: primul lucru de instalat pe orice PostgreSQL
PostgreSQL

pg_stat_statements: primul lucru de instalat pe orice PostgreSQL

PostgreSQL pg_stat_statements: extensia de diagnosticare query de instalat prima. Găsește cele trei query-uri care consumă 80% din resurse.

VACUUM și autovacuum: de ce PostgreSQL are nevoie ca cineva să facă curățenie
PostgreSQL

VACUUM și autovacuum: de ce PostgreSQL are nevoie ca cineva să facă curățenie

PostgreSQL VACUUM și autovacuum: diagnostic bloat pe bază de date 200 GB, citirea pg_stat_user_tables și tuning fără a dezactiva nimic.

Roluri și utilizatori în PostgreSQL: de ce totul este (doar) un ROLE
PostgreSQL

Roluri și utilizatori în PostgreSQL: de ce totul este (doar) un ROLE

PostgreSQL ROLE: utilizatorii și rolurile sunt același obiect. Model mental, GRANT, NOINHERIT și construirea unui utilizator read-only mentenabil.

Când un LIKE '%valoare%' încetinește totul: un caz real de optimizare PostgreSQL
PostgreSQL

Când un LIKE '%valoare%' încetinește totul: un caz real de optimizare PostgreSQL

Optimizare PostgreSQL: LIKE '%valoare%' generează full scan. Folosirea pg_trgm și index GIN pentru a transforma căutarea wildcard în lookup rapid.

EXPLAIN ANALYZE nu e suficient: cum sa citesti cu adevarat un plan de executie PostgreSQL
PostgreSQL

EXPLAIN ANALYZE nu e suficient: cum sa citesti cu adevarat un plan de executie PostgreSQL

PostgreSQL EXPLAIN ANALYZE: citirea planului de execuție, nested loop costisitor și ANALYZE pe statistici vechi. Caz real cu 2M rânduri.

Explorează alte secțiuni