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

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

Production query plans without production data

PostgreSQL 18 makes optimizer statistics portable. Export from production and inject into test databases for realistic query plans without the data.

2026-03-08 · 8 min · Radim Marek

PostgreSQL Statistics: Why queries run slow

Slow PostgreSQL queries? Stale statistics are often to blame. Learn how the query planner uses statistics to estimate row counts and how to fix them.

2026-02-26 · 15 min · Radim Marek