The Art of PostgreSQL · 2011–2026
Book editions, lessons, lab, and open-source tools — a full record of the project from first publication to today.
WITH RECURSIVE border-hop illustration below is one example.pgcopydb, pg_auto_failover, and pgloader are free open-source software maintained by one person. Financial support helps keep them maintained and the servers running.
WITH RECURSIVE, from the book's chapter on recursive queries.with recursive reach(isocode, depth) as (
select isocode, 0
from geoname.country
where iso = 'FR'
union all
select n.neighbour, r.depth + 1
from geoname.neighbour n
join reach r on r.isocode = n.isocode
where r.depth < 4
)
cycle isocode set is_cycle using path
select distinct on (isocode) iso3, depth
from reach where not is_cycle
order by isocode, depth;Six categories covering SQL foundations, window functions, aggregation, joins, performance, and schema design. Every lesson is free; no account required.
The Art of PostgreSQL Lab GitHub
Interactive SQL practice environment with real PostgreSQL datasets and exercises aligned with the book chapters. Book readers can explore every dataset used in the text hands-on. The starter-kit runs without the book — a self-contained Docker environment with the same datasets, usable by anyone.
docker compose build docker compose up -d postgres docker compose run --rm taop load-data
Automates running pg_dump | pg_restore between two live PostgreSQL servers with full parallelism — schema, data, sequences, indexes, and large objects, without a maintenance window. Includes Change Data Capture via Postgres Logical Decoding: capture changes during the base copy, then replay them for near-zero-downtime cutover with pgcopydb clone --follow.
High-availability automation for PostgreSQL 13–18: a monitor service orchestrates health checks and failover, maintaining write availability across node failures and replica promotions. Supports two-node primary/standby setups through to multi-standby production clusters and Citus HA. Featured as one of the primary HA solutions for self-managed PostgreSQL in Google's PostgreSQL architecture documentation.
Fully rewritten and relaunched under the current title. Restructured around teaching SQL as a language for application developers — with a complete dataset and worked examples throughout every chapter.
PostgresOpen 2019 — Chicago
Conference talk on SQL query composition and the book's core thesis: that relational thinking unlocks the full power of PostgreSQL for application developers.
Joins Citus Data
Joined Citus Data as a PostgreSQL engineer, working on the Citus distributed PostgreSQL extension — which shards and distributes tables across nodes for horizontal scale. Citus was later acquired by Microsoft and is now the engine behind Azure Cosmos DB for PostgreSQL.
Mastering PostgreSQL in Application Development
First edition, self-published. The original title of what became The Art of PostgreSQL. The core argument — that SQL is a powerful query language most developers underuse — has not changed.
Event Triggers — PostgreSQL 9.3
PostgreSQL 9.3 introduced Event Triggers, designed and implemented by Dimitri — a new trigger category that fires on DDL events (CREATE, ALTER, DROP) database-wide, not per-table. Extensions can install event trigger functions to intercept and react to schema changes. Used today by Citus (propagating DDL to worker nodes), TimescaleDB (intercepting DDL on hypertables), pglogical and pgl_ddl_deploy (capturing DDL for logical replication), and PostgREST (invalidating its schema cache on ddl_command_end).
Data loading tool for PostgreSQL using the COPY command with transactional error handling — bad rows are rejected and logged while good data keeps loading. Originally written in Python, then rewritten in Common Lisp (v3) for parallel performance. v4 is a full rewrite in Clojure/JVM, distributed as a single self-contained JAR — no native dependencies, no SBCL, just java -jar pgloader.jar (Java 21+). Migrates from MySQL, SQLite, MS SQL Server, CSV, and other sources, including full schema generation.
pgextwlist — Extension Whitelisting
Built to solve the managed-database problem the PostgreSQL 9.1 Extensions system immediately created: how do you let non-superuser application accounts run CREATE EXTENSION without granting superuser? pgextwlist intercepts CREATE, DROP, and ALTER EXTENSION statements, checks the extension name against a configurable allowlist, and runs the operation as the bootstrap superuser on the caller's behalf. It became standard infrastructure for cloud PostgreSQL providers — Heroku maintains a fork, Zalando ships it in every Spilo/postgres-operator cluster, and Aiven uses it to delegate extension management to tenant accounts — and continues to track new PostgreSQL releases after 14 years of active maintenance.
PostgreSQL Extensions — PostgreSQL 9.1
The Extensions system in PostgreSQL 9.1 was designed and implemented by Dimitri — the mechanism behind every CREATE EXTENSION call in use today. It lets database developers package functions, types, operators, and index methods as versioned, installable units. CREATE EXTENSION postgis, CREATE EXTENSION pgvector, CREATE EXTENSION pg_trgm: all of it runs on this foundation.