Every table, index, and sequence in PostgreSQL comes down to the same thing: 8KB pages, on disk and in shared memory. Query performance, UPDATE overhead, table bloat, and VACUUM behaviour all trace back to what happens inside those pages. This guide covers that layer, one mechanism at a time.

The chapters follow the life of the data. Pages move through shared buffers, rows get laid out as tuples, MVCC keeps old versions around for concurrent readers, HOT updates dodge the index maintenance tax, TOAST takes the values that don't fit, and VACUUM reclaims what everything else leaves behind. The tools are the same throughout: pageinspect, pg_visibility, and pg_freespacemap, all shipped with PostgreSQL, and every session can be replayed on a scratch database.

The chapters build on each other, but each one restates what it needs. Start at the beginning if the storage layer is new territory, or jump straight to the mechanism you are debugging.