KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA
PostgreSQL 应用课:把 PG 的特性用对 — keel 龙骨
PostgreSQL 应用课:把 PG 的特性用对 的参考信息:PostgreSQL 应用课:把 PG 的特性用对
先看三个会真实发生的场景。
对账系统跑了两天,财务说差 0.03 元。查到最后,金额列的类型是 double precision,累加一百万条之后就是这个结果。
一个「待处理列表」页面上少了十几条记录。SQL 写的是 WHERE status <> 'done'。少掉的那批,status 是 NULL。
库存服务压测时超卖了三件。代码先 SELECT 查库存、再 UPDATE 扣减,两个请求同时进来,都读到了 10。
这三件事都不用翻 PostgreSQL 的存储引擎,也用不着先搞懂 MVCC 和 WAL。它们是用法选择的问题:类型选哪个、约束加不加、并发写怎么表达、什么时候该拆表。这门课就讲这类判断。
它和另外两门课的分工是清楚的:
- 通用 SQL 调优的方法论(索引、执行计划、连接池、缓存策略)在《数据库与缓存调优》;
- 存储引擎与运行时内部(行版本、VACUUM、WAL、锁、复制)在《PostgreSQL 工程课》。
本课夹在中间:站在写业务代码的人的位置,决定这个库该怎么被使用。七章覆盖类型与建模、约束兜底、JSONB 的边界、把逻辑压进 SQL、事务边界与并发写、权限与多租户隔离、以及什么时候不该用它。
七章里的每一条命令都在一台真实的 PostgreSQL 16.15 实例上跑过,正文里的输出是原始回显,不是预期结果。其中一个结论值得一提:本实验集群用 --locale=C 初始化,pg_trgm 因此不为汉字生成 trigram——这个坑在选型时很容易被忽略,第 06 章有完整取证。