PostgreSQL 模式
PostgreSQL 最佳实践速查参考。详细指引请使用 database-reviewer 代理。
何时启用
- 编写 SQL 查询或迁移
- 设计数据库模式
- 诊断慢查询
- 实施行级安全策略(Row Level Security)
- 配置连接池
速查参考
索引表
| 查询模式 | 索引类型 | 示例 |
|---|
WHERE col = value | B-tree(默认) | CREATE INDEX idx ON t (col) |
WHERE col > value | B-tree | CREATE INDEX idx ON t (col) |
WHERE a = x AND b > y | 复合索引 | CREATE INDEX idx ON t (a, b) |
WHERE jsonb @> '{}' | GIN | CREATE INDEX idx ON t USING gin (col) |
WHERE tsv @@ query | GIN | CREATE INDEX idx ON t USING gin (col) |
| 时间序列范围 | BRIN | CREATE INDEX idx ON t USING brin (col) |
数据类型速查
| 使用场景 | 正确类型 | 避免使用 |
|---|
| ID | bigint | int、随机 UUID |
| 字符串 | text | varchar(255) |
| 时间戳 | timestamptz | timestamp |
| 金额 | numeric(10,2) | float |
| 标志位 | boolean | varchar、int |
常见模式
复合索引顺序:
-- 等值列在前,范围列在后
CREATE INDEX idx ON orders (status, created_at);
-- 适用于:WHERE status = 'pending' AND created_at > '2024-01-01'
覆盖索引:
CREATE INDEX idx ON users (email) INCLUDE (name, created_at);
-- 避免对 SELECT email, name, created_at 进行回表查找
**部分索…