怎么用这本书
上面这条状态栏不是装饰。页面加载后它会下载约 3MB 的 WebAssembly,在你的浏览器里启动一个真正的 PostgreSQL 18 后端,然后建好全书统一的数据集。整个过程不经过任何服务器——你在这本书里执行的所有 SQL 都留在你自己的机器上。
先试一下:
SELECT version();
三种交互组件
Section titled “三种交互组件”可运行代码块(就是上面那个):正文里凡是带「▶ 运行」的 SQL 都能改写重跑,⌘/Ctrl + Enter 是快捷键。同一页面里的代码块共享同一个数据库连接,并且按你点击的顺序改变状态——前一个块建的表,后一个块就能查到。想回到干净状态,点状态栏右侧的「重置数据集」。
执行计划视图:把 EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON) 的结果渲染成树,并把「估算行数与实际行数偏差超过 10 倍」的节点标红——那通常就是慢查询的根因。
双会话时间线:用于隔离级别、锁等待、死锁这类必须两个会话交错才能演示的场景。
一个刻意简化的订单系统,四张表:
SELECT c.relname AS "表", c.reltuples::bigint AS "行数估计", pg_size_pretty(pg_total_relation_size(c.oid)) AS "总大小" FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = 'public' AND c.relkind = 'r' ORDER BY c.relname;
结构如下:
users(id, name, email, country, created_at)products(sku, name, price numeric, tags jsonb, description text)orders(id, user_id, amount numeric, status order_status, created_at)order_items(id, order_id, sku, qty, price)数据全部由 generate_series 配合质数取模生成,不含任何随机性。这意味着你看到的行数、ctid、执行计划和书里写的完全一致——否则「你应该看到 (0,2)」这种话就没法写。
SELECT id, user_id, amount, status, created_at FROM orders ORDER BY id LIMIT 5;
按阶段顺序读。这本书的章节顺序不是知识点的字典序,而是依赖顺序:阶段三的 MVCC 是阶段四索引和阶段六存储的前置知识,跳过它,后面很多结论就只能背。
每个阶段末尾有一份「验收问题」。能用自己的话答上来再往下走。