Skip to content

分区与扩展生态

声明式分区、分区裁剪、PostGIS、pgvector、FDW、扩展生态全景。

Updated View as Markdown
For humans

分区与扩展生态

PostgreSQL 的生态优势来自两件事:声明式分区是内置能力,扩展体系让 PG 从关系库变成多模型平台。面试主线:分区解决什么问题,扩展生态里 PostGIS/pgvector/FDW 各是什么。

声明式分区

PG 10+ 原生支持声明式分区(RANGE/LIST/HASH),不需要外部工具:

CREATE TABLE events (...) PARTITION BY RANGE (created_at);
CREATE TABLE events_2026_01 PARTITION OF events
  FOR VALUES FROM ('2026-01-01') TO ('2026-02-01');

核心收益:

  • 分区裁剪:查询条件命中分区键时只扫描对应分区,是最大的性能收益
  • 数据生命周期管理:按时间分区,过期分区直接 DETACH 归档,删除成本极低
  • 每分区独立索引、独立 VACUUM

注意点:分区键要匹配查询模式(时间序列按时间分);跨分区查询退化为 Append 扫描所有分区;分区过多(上千)会带来规划开销。分区是运维层面的优化,分库分表是架构层面的拆分,两者解决不同问题。

PostGIS

空间扩展的事实标准:geometry 类型、空间索引(GiST)、空间函数(距离、相交、缓冲区)、地理坐标系。选型地位:需要空间查询(附近的人、区域统计)时 PostGIS 是默认答案,MySQL 的空间能力远不及。

pgvector

向量检索扩展:vector 类型、三种距离、IVFFlat 和 HNSW 索引。RAG 场景轻量选择,见索引体系篇。

FDW:外部数据包装器

FDW(Foreign Data Wrapper)让 PG 能查询外部数据源,如查询另一个 PG(postgres_fdw)、MySQL、文件、甚至远端 API。用途:

  • 跨库查询(替代部分分库分表场景的跨库 JOIN)
  • 数据联邦:一张外部表映射到数仓
  • 注意:FDW 查询性能有限,适合低频跨库访问,不适合高频 OLTP

扩展生态全景

扩展 解决什么
PostGIS 空间数据
pgvector 向量检索
postgres_fdw 跨库访问
pg_repack 在线重建表
pg_stat_statements 慢 SQL 统计(生产必装)
pgaudit 审计日志
timescaledb 时序数据

生产必装 pg_stat_statements 监控慢 SQL,这是 PG 性能排查的入口。

面试追问

  1. 声明式分区有什么收益? 分区裁剪只扫目标分区,生命周期管理(DETACH 归档),每分区独立维护。分区键要匹配查询模式
  2. 分区和分库分表什么关系? 分区是单机内运维优化,分库分表是跨机架构拆分。分区解决不了写入吞吐瓶颈
  3. FDW 是什么? 外部数据包装器,让 PG 查询外部数据源(另一个 PG、MySQL、文件)。跨库查询可用但性能有限
  4. PostGIS 的定位? 空间扩展事实标准,GiST 索引支撑空间查询。需要空间能力时默认答案
  5. 生产必装的监控扩展? pg_stat_statements,统计慢 SQL 和资源消耗,性能排查入口
Navigation

Type to search…

↑↓ navigate↵ selectEsc close