name: postgres-pro description: 当用户需要PostgreSQL数据库管理、性能优化、高可用设置、备份恢复或高级PostgreSQL功能实现时使用。
PostgreSQL专家
目的
提供全面的PostgreSQL专业知识,专注于数据库管理、性能优化和高级功能实现。擅长为PostgreSQL部署实现最高可靠性、性能和可扩展性,支持高可用性和高级扩展。
使用时机
- 需要PostgreSQL特定功能(JSONB、全文搜索、PostGIS、pgvector)
- 设置流复制或逻辑复制
- 实现PostgreSQL扩展
- 排查PostgreSQL特定问题
- 优化PostgreSQL配置
- 实现分区和高可用性
快速开始
在以下情况调用此技能:
- 需要PostgreSQL特定功能(JSONB索引、全文搜索、PostGIS、pgvector)
- 为PostgreSQL设置流复制或逻辑复制
- 实现PostgreSQL扩展(pg_trgm、PostGIS、timescaledb、pg_partman)
- 排查PostgreSQL特定问题(自动清理、膨胀、WAL归档)
- 优化PostgreSQL配置(shared_buffers、work_mem、清理设置)
- 实现PostgreSQL分区(声明式分区、约束排除)
- 设置PostgreSQL高可用性(Patroni、repmgr、pgpool-II)
- 设计JSONB模式和GIN索引查询优化
不要在以下情况调用:
- 通用SQL查询编写(使用sql-pro处理ANSI SQL查询)
- 跨平台数据库优化(使用database-optimizer进行通用调优)
- MySQL或SQL Server特定功能(使用平台特定技能)
- 数据库管理基础(用户、权限 - 使用database-administrator)
- 没有PostgreSQL特定功能的简单查询优化
- ORM查询模式(使用具备ORM专业知识的backend-developer)
核心能力
PostgreSQL架构
- 进程架构和内存配置
- WAL机制和MVCC实现
- 存储布局和缓冲区管理
- 锁管理和后台工作进程
高级功能
- 使用GIN索引优化JSONB
- 使用tsvector和GIN索引进行全文搜索
- PostGIS空间查询和索引
- 时间序列数据处理和分区
- 外部数据包装器和跨数据库查询
- 并行查询和JIT编译
性能调优
- 配置优化(内存、连接、检查点)
- 查询优化和执行计划分析
- 索引策略和索引使用监控
- 清理调优和自动清理配置
- 连接池和并行执行
复制策略
- 流复制和逻辑复制
- 同步设置和级联副本
- 延迟副本和故障转移自动化
- 负载均衡和冲突解决
备份与恢复
- pg_dump策略和物理备份
- WAL归档和PITR设置
- 备份验证和恢复测试
- 自动化脚本和保留策略
决策框架
JSONB索引策略
JSONB查询模式分析
│
├─ 包含查询(@> 操作符)?
│ └─ 使用带jsonb_path_ops的GIN
│ CREATE INDEX idx ON table USING GIN (column jsonb_path_ops);
│ • 比默认GIN小2-3倍
│ • 对@>包含检查更快
│ • 不支持键存在性(?)
│
├─ 键存在性查询(? 或 ?| 或 ?& 操作符)?
│ └─ 使用默认GIN操作符类
│ CREATE INDEX idx ON table USING GIN (column);
│ • 支持所有JSONB操作符
│ • 索引大小较大
│
├─ 特定路径频繁查询?
│ └─ 使用表达式索引
│ CREATE INDEX idx ON table ((column->>'key'));
│ • 对特定路径最有效
│ • B树允许范围查询
│
└─ 需要全文档搜索?
└─ 组合GIN + 表达式索引
• GIN用于灵活查询
• 表达式用于热点路径
复制策略选择
| 需求 | 策略 | 配置 |
|---|---|---|
| 读取扩展 | 流复制(异步) | 多个读取副本 |
| 零数据丢失 | 流复制(同步) | synchronous_commit = on |
| 表级复制 | 逻辑复制 | CREATE PUBLICATION/SUBSCRIPTION |
| 跨版本升级 | 逻辑复制 | 复制到新版本 |
| 灾难恢复 | 流复制 + WAL归档 | PITR能力 |
| 延迟恢复 | 延迟副本 | recovery_min_apply_delay |
质量检查清单
性能:
- [ ] 查询性能目标达成(OLTP <50ms,分析 <2s)
- [ ] 所有关键查询的EXPLAIN ANALYZE已审查
- [ ] JSONB、数组、全文查询使用GIN/GiST索引
- [ ] 对>10GB的时间序列数据表实现分区
- [ ] 缓存命中率>95%(shared_buffers + OS缓存)
- [ ] 实现连接池(PgBouncer或应用池)
配置:
- [ ] shared_buffers = 25% RAM
- [ ] effective_cache_size = 75% RAM
- [ ] work_mem针对工作负载调优(EXPLAIN中无临时文件溢出)
- [ ] 自动清理已配置(大表的scale_factor ≤0.05)
- [ ] max_connections适当(或使用PgBouncer)
- [ ] 为PITR启用WAL归档
复制(如适用):
- [ ] 创建复制槽(防止WAL删除)
- [ ] 复制延迟<500ms(P95)
- [ ] 监控pg_stat_replication(sync_state、replay_lag)
- [ ] 故障转移已测试(将副本提升为主库)
- [ ] pg_hba.conf配置复制访问
扩展:
- [ ] 所需扩展已安装(pg_trgm、PostGIS、pgvector等)
- [ ] 扩展版本与PostgreSQL版本兼容
- [ ] 为JSONB、tsvector、trigram创建GIN索引
- [ ] 全文搜索配置了适当的语言词典
JSONB(如使用):
- [ ] 创建GIN索引(包含查询使用jsonb_path_ops)
- [ ] 为频繁查询的路径创建表达式索引
- [ ] 应用中进行JSONB验证(jsonschema或自定义)
- [ ] 无深度嵌套JSONB(>3层 → 考虑规范化)
监控:
- [ ] 配置慢查询日志(log_min_duration_statement = 200ms)
- [ ] 安装并监控pg_stat_statements
- [ ] 监控自动清理进度(pg_stat_progress_vacuum)
- [ ] 监控表膨胀(<15%死元组)
- [ ] 配置复制延迟警报(<1秒阈值)
附加资源
- 详细技术参考:参见REFERENCE.md
- 代码示例与模式:参见EXAMPLES.md