PostgreSQL guides

Short, practical deep dives into the parts of PostgreSQL that bite in production. No fluff, real commands, honest trade-offs.

Performance

How to read EXPLAIN ANALYZE

What the costs mean, why actual times and rows are per-loop averages, what BUFFERS tells you, and the traps that make plans misleading at first glance.

Performance

Choosing the right index

B-tree covers most cases — but GIN, GiST, BRIN, partial and expression indexes each have a moment where they win by an order of magnitude.

Operations

VACUUM, autovacuum and table bloat

MVCC never updates a row in place. Where the dead versions go, how autovacuum decides when to clean up, and how to tell when it's falling behind.

Concurrency

Transaction isolation levels

What Read Committed actually guarantees (less than you think), when Repeatable Read and Serializable throw errors, and how to retry correctly.

How these guides are written

Each guide is based on how PostgreSQL actually behaves in production, verified against the official documentation. They focus on the questions that come up when something is slow or blocked at 4pm on a weekday — not on completeness for its own sake. Where a topic has a matching interactive tool on this site, the guide links to it.