PostgreSQL 工程实践指南
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_15292d5a/yjkj-compound-eng-postgresql。
技能介绍
解决什么问题
PostgreSQL 应用中的很多问题不会在初期暴露:VARCHAR(n)、可空布尔、缺少外键索引、OFFSET 分页和 SELECT * 会在数据规模增长后变成慢查询、锁竞争和索引膨胀。生产迁移里,普通 CREATE INDEX、直接加 NOT NULL、原地 ALTER TYPE 也可能锁表或让回滚变复杂。JSONB、RLS 和并发写还容易踩到语义坑,例如删错键、把 SQL NULL 当成 JSON null、用 FOR UPDATE 误以为能阻止幻影插入。compound-eng-postgresql 把这些实践整理成可执行的工程规范。
技能如何工作
- 类型与 Schema:优先
BIGINT GENERATED ALWAYS AS IDENTITY、TIMESTAMPTZ、TEXT、NUMERIC(p,s)、BOOLEAN NOT NULL DEFAULT、JSONB,并要求外键索引、CHECK约束、created_at与updated_at。 - 迁移安全:迁移不可变、生产前滚优先;重命名或删列使用 expand-contract;加索引使用
CREATE INDEX CONCURRENTLY;大批量回填写分片,并可用FOR UPDATE SKIP LOCKED控制锁范围。 - 索引与 JSONB:按访问模式选择 B-tree、GIN、GiST、BRIN;JSONB 删除键优先用
#-,避免col - 'a,b'、链式- 'a' - 'b',以及把jsonb_set中的 SQLNULL误当成删键。 - 并发与查询:
SELECT ... FOR UPDATE不阻止幻影插入,get-or-create 更适合唯一索引 +ON CONFLICT或 advisory lock;分页优先游标;优化先从EXPLAIN (ANALYZE, BUFFERS)开始。
适用边界
它更适合代码评审、迁移设计、性能排查和数据库规范落地。部分规则依赖 PostgreSQL 版本,例如 NULLS NOT DISTINCT;复杂全文检索、并发脚本和运维策略仍需结合具体业务与版本验证。
使用场景
- 设计或评审 PostgreSQL 表结构时,对照类型默认、外键索引和 CHECK 约束输出修改建议。
- 准备生产迁移方案时,用 expand-contract、CONCURRENTLY 和批量回填写判断是否锁表。
- 排查慢查询和索引未命中时,按 EXPLAIN BUFFERS、pg_stat_user_indexes 与索引策略定位。
- 处理 JSONB 字段删除、更新和并发写时,避免键丢失、SQL NULL 与 read-modify-write 覆盖。
适合人员
- 负责核心业务数据库的设计工程师,希望把 PostgreSQL 建表、索引和约束规范统一落地。
- 维护生产迁移脚本的后端工程师,需要在上线前判断 DDL 锁表、回滚和零停机风险。
- 排查慢查询的 SRE 或数据库工程师,想从执行计划、统计信息和索引策略定位瓶颈。
- 处理复杂 JSONB 与并发写的后端工程师,需要避免键删除、NULL 语义和写覆盖陷阱。