Get things done, without drama.

boringSQL stands for core belief: truly reliable tech stack. Databases? They've been around for decades and they're battle-tested. SQL? Over 50 years old and still one of the most in-demand programming languages[1].

PostgreSQL is a universe of its own - decades-tested, still the workhorse. Around it, a generation of analytical and embedded SQL engines is extending the same boring foundations: the relational model, SQL, query planners you can reason about. Master them through practical, hands-on learning that prepares you for real-world challenges.

Want to stay in the loop? Subscribe to the newsletter.

Recent Posts

VACUUM at the Page Level

Watch a VACUUM cycle with pageinspect, pg_freespace, and pg_visibility: how a dead tuple loses its storage, then its index entry, then its slot, and how the freed space gets reused.

2026-07-05 · 16 min · Radim Marek

Same rows, different SUM

Same query, same rows, different SUM totals in PostgreSQL. The culprit is parallel aggregation over double precision floats, not a bug. Here is the mechanism and the fix.

2026-06-28 · 11 min · Radim Marek

The NULL in your NOT IN

A single NULL turns NOT IN into a query that silently returns zero rows, and the planner couldn't optimize around it for as long as anyone can remember, until a PostgreSQL 19 patch.

2026-06-14 · 13 min · Radim Marek

pg_stat_statements: everything it can't

Where pg_stat_statements stops short: the entries it silently evicts, the query text that can vanish, the plans and replicas it never sees, and the query store Postgres still doesn't ship.

2026-06-03 · 15 min · Radim Marek

pg_stat_statements: everything it tells you

What pg_stat_statements records and what it quietly drops: the queryid jumble that splits one query into many rows, the frozen first-seen query text, and averages that hide your p99.

2026-06-02 · 17 min · Radim Marek

TOAST: Where PostgreSQL hides big values

A heap tuple cannot cross a page boundary, yet a single jsonb column can hold a megabyte. TOAST is the trick. A pageinspect tour of pointers and chunks.

2026-05-24 · 14 min · Radim Marek

Welcome to ORDER BY jungle

Bare names and expressions in ORDER BY go through two different parsers in PostgreSQL. The boundary is one if-statement, and it shows up in odd places.

2026-05-15 · 11 min · Radim Marek

Strong views on PostgreSQL VIEWs

Views are PostgreSQL's cleanest abstraction and its most rigid. Rewrite rules, attribute numbers, and the dependency catalog turn column changes into teardowns.

2026-05-10 · 21 min · Radim Marek

HOT Updates in Postgres

Every UPDATE risks rewriting every index. HOT updates skip that by chaining tuple versions in one page. A pageinspect tour of HOT chains and fillfactor.

2026-04-28 · 12 min · Radim Marek

PostgreSQL MVCC, Byte by Byte

Two concurrent sessions, same page, different answers. An interactive tour of xmin, xmax, snapshots, and the visibility rules deciding what you see.

2026-04-17 · 9 min · Radim Marek