The two-terminal isolation demo is the first time transaction isolation has ever made sense to me, and I have read the docs three times. Tomás just shows you the anomaly happening.
Postgres for Application Developers
Schema, indexes and query plans — enough database to stop the 3am page.
- 12 hours of video
- 8 hands-on projects
- A seeded 5M-row playground database
- Lifetime access
- Certificate of completion
47% of the running time is hands-on — projects and quizzes rather than video.
What you'll learn
Design a schema that lasts
Make the decisions that are cheap now and expensive in a year, so you are not migrating every sprint.
Read a query plan
Work through EXPLAIN ANALYZE line by line and find the one that is costing you the request.
Pick the right index
B-tree, GIN, GiST or BRIN — plus how to recognise the four indexes you should delete.
Reason about concurrency
Understand isolation levels well enough to predict a race before it reaches production.
Fix N+1 at the query level
Solve it in SQL rather than in ORM configuration, where the fix tends not to survive a refactor.
What’s inside
Every figure below is summed from the lesson list, not estimated — so the chart and the curriculum can never disagree.
| Content type | Minutes | Share |
|---|---|---|
| Video lessons | 406 | 52.7% |
| Hands-on projects | 350 | 45.4% |
| Quizzes | 15 | 1.9% |
47% of this course is hands-on.
Curriculum
4 sections · 19 lessons · 13h total
Decisions that are cheap now and expensive in a year.
- VideoNormalising far enough and no further
- VideoKeys, constraints and letting the database say no
- VideoChoosing types: text, numeric, timestamptz, jsonb
- VideoMigrations that do not lock the table
- ProjectProject: model a marketplace
The planner is not a mystery once you can read its output.
- VideoEXPLAIN, ANALYZE, BUFFERS — line by line
- VideoJoins, and why the planner picked that one
- VideoCTEs, window functions and lateral joins
- ProjectProject: take a 9-second report under 200ms
- QuizPlan-reading quiz
Which one, on what, and what it costs you on write.
- VideoB-tree, GIN, GiST and BRIN — a decision tree
- VideoComposite indexes and column order
- VideoPartial and expression indexes
- VideoFinding indexes nobody uses
- ProjectProject: index a slow write-heavy table
Locks, isolation and the failure you will meet in production.
- VideoIsolation levels, demonstrated with two terminals
- VideoDeadlocks: causing one, then fixing it
- VideoConnection pooling and why you ran out
- ProjectCapstone: diagnose a production slowdown
Tomás Lindqvist
Database engineer · Postgres since 8.4
Tomás has been paged by more Postgres instances than he can count and has written the post-mortem for most of them. He teaches query planning the way a mechanic teaches engines: with the cover off and the thing running.
DBA at Kestrel Financial
CompletedA 14 TB primary with a four-nine SLA.
Consulting practice
CompletedIndex and plan reviews for 70+ product teams.
Contributor
In progressPatches to pg_stat_statements and the EXPLAIN output format.
What learners said
3,115 ratings from people who bought this course.
3,115 ratings
- 5 stars
- 4 stars
- 3 stars
- 2 stars
- 1 star
I am a frontend engineer who kept getting handed slow endpoints. I can now read a plan and tell the backend team exactly which index is missing. Worth every hour.
Content is excellent but the playground database took me most of an evening to get running on Windows. The Docker path in the notes is the one to use — I wish that were said up front.
Learners also took
Same category first, then whatever pairs well with it.
Ship It: Next.js 16 from Zero to Production
Build and deploy a real application on the App Router — async request APIs, streaming, caching and the deploy that follows.
TypeScript for Teams
Types that catch real bugs and stay out of the way — for codebases with more than one author.
React Server Components, Properly
The boundary, the payload and the render — what actually happens between the server and the browser.
Browse the full course catalogue, or see how this page is put together on Built with VivekUI.