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

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

Don't let AI touch your production database

Most PostgreSQL MCP servers are connection wrappers or provider gateways. Neither warns an AI agent that its migration locks a 4M-row table. dryrun MCP does.

2026-04-06 · 11 min · Radim Marek

Good CTE, bad CTE

The planner treats CTEs very differently depending on how you write them. Here's what happens under the hood, version by version, through PostgreSQL 18.

2026-03-29 · 18 min · Radim Marek

pg_regresql: truly portable PostgreSQL statistics

pg_regresql hooks into the PostgreSQL planner to trust injected catalog statistics instead of file sizes. Production-scale query plans in CI without the data.

2026-03-21 · 5 min · Radim Marek