PostgreSQL 表设计指南
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-02qudk26/postgresql-zh。
技能介绍
解决什么
PostgreSQL 表结构看似只是建表,实际会把后续查询、迁移、权限和容量问题锁死。该技能针对常见坑:该用 TIMESTAMPTZ 却用 TIMESTAMP、该用 NUMERIC 却用浮点、外键忘记建索引、过早反规范化、UNIQUE 允许多个 NULL、大 JSONB 查询无索引、生产 DDL 缺少回滚等。
技能如何工作
- 先捕获实体、访问模式和扩展目标:行数、QPS、保留期、真实查询路径。
- 选择能强制不变量的类型与约束:PK、FK、UNIQUE、CHECK,并用
NOT NULL、DEFAULT表达业务默认。 - 为真实查询路径设计索引:
B-tree、INCLUDE覆盖索引、部分索引、表达式索引,以及GIN/GiST支持JSONB、数组和全文检索。 - 需要规模或访问控制时规划
RANGE、LIST、HASH分区与ROW LEVEL SECURITY。 - 给出安全演进路径:事务性 DDL、
CREATE INDEX CONCURRENTLY、避免易变默认值触发重写、先删约束再删列。
适用边界
适合 PostgreSQL 模式设计、审查与迁移评审;不适用于只做查询调优、非 PostgreSQL 数据库或通用建模指南。资料强调:没有备份和回滚计划时,不要对生产执行破坏性 DDL;用 EXPLAIN 验证索引;JSONB 只放半结构化属性,核心关系仍应落在表中。
使用场景
- 评审订单、用户等核心表结构,补齐 `PRIMARY KEY`、`NOT NULL`、外键索引和默认值。
- 为大日志或事件表设计 `TIMESTAMPTZ`、`RANGE` 分区和 `BRIN` 索引,避免全表扫描。
- 给配置或扩展字段选 `JSONB` 并加 `GIN` 索引,设计 `@>`、键存在查询与生成列提取。
- 执行迁移前检查 DDL 风险,用事务回滚和 `CREATE INDEX CONCURRENTLY` 控制生产影响。
适合人员
- 负责订单、用户、日志等核心数据模型的 PostgreSQL 后端工程师。
- 需要在上线前审查表结构、索引和迁移方案的数据库工程师或 SRE。
- 设计事件、日志或时序表,并关注分区、TOAST 与写入性能的开发者。
- 要在 `JSONB` 与关系列之间取舍,并补充 `GIN` 索引的产品技术负责人。