Postgres 扩展推荐
Mortar 用 Postgres 做 database primitive 的存储。Postgres 标准库
够用,但几个扩展能显著提升 Mortar 用户的应用质量。这里列出
Mortar 团队主动测过 + 推荐启用的扩展,每个扩展给出用途、安
装方式、何时该用。
推荐启用清单
| 扩展 | 用途 | 建议安装时机 |
|---|---|---|
pgvector | 向量嵌入(RAG / 语义搜索) | 任何 AI 应用 |
pg_partman | 时间序列表自动分区 | 单表 > 1 千万行 |
pg_search | 全文搜索(替代 tsvector 简化) | FTS 流量 < 10 QPS |
pg_cron | 数据库内 cron 调度 | 业务逻辑跟 schema 强绑定时 |
pg_stat_statements | 慢查询分析 | 所有生产环境必装 |
pgaudit | DDL / 数据访问审计 | 等保 / SOC 2 合规要求 |
pg_trgm | 模糊匹配(拼写容错搜索) | 中文混拼搜索 |
zhparser | 中文分词(搭配 pg_search / tsvector) | 中文 FTS |
启用方式
Mortar 自带的 RDS 实例没有自动启用任何扩展——按需打开。SaaS
共享集群(当前默认)允许用户自助 CREATE EXTENSION 这些
扩展。独立 RDS(规划中,Large+ tier)+ BYOC(规划中) 用户的 DBA
有更完整的权限。
-- 在你的 project tenant schema 下
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS pg_trgm;
-- pg_stat_statements 必须 superuser,Mortar 平台预装在所有共享池
用例 + 示例
pgvector — 语义搜索 + RAG
详见 rag-cookbook.md。简版:
CREATE EXTENSION vector;
ALTER TABLE docs ADD COLUMN embedding vector(1536);
CREATE INDEX ON docs USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100);
-- top-K nearest
SELECT id, content FROM docs ORDER BY embedding <=> '[0.1, 0.2, ...]' LIMIT 10;
pg_partman — 时序分区
CREATE EXTENSION pg_partman;
SELECT partman.create_parent(
'public.events',
'created_at',
'native',
'monthly'
);
适合 events / audit_log / messages 这类只插入 + 按时间查询的表。
减少索引大小、加速 WHERE created_at > now() - interval '7 days' 类查询。
pg_trgm — 模糊搜索
CREATE EXTENSION pg_trgm;
CREATE INDEX ON users USING gin (display_name gin_trgm_ops);
SELECT * FROM users WHERE display_name % 'zhang san' ORDER BY similarity(display_name, 'zhang san') DESC LIMIT 10;
对中英文混合 + 拼写错误友好。配合 zhparser 能搜中文。
zhparser — 中文分词
CREATE EXTENSION zhparser;
CREATE TEXT SEARCH CONFIGURATION cn (PARSER = zhparser);
ALTER TEXT SEARCH CONFIGURATION cn ADD MAPPING FOR n,v,a,i,e,l WITH simple;
-- 用法
SELECT * FROM articles WHERE to_tsvector('cn', body) @@ to_tsquery('cn', '深度学习 & 神经网络');
跟 pg_search 比的优劣:原生 tsvector 慢但简单;pg_search 快但
需独立 worker。中等规模(< 1 千万行)选原生 + zhparser。
pg_stat_statements — 必装
CREATE EXTENSION pg_stat_statements;
SELECT query, calls, mean_exec_time FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 20;
慢查询 hit list。生产环境无脑装。
不推荐的扩展
| 扩展 | 为什么不推荐 |
|---|---|
plv8 | JavaScript in Postgres — 想用 JS 跑业务逻辑应该用 Mortar 的 compute primitive(Aliyun FC / Tencent SCF),不要扔进数据库里。 |
postgres_fdw | 跨库 join — 设计的是数据架构问题,不是 SQL 问题;切片到合适的 primitive 边界更值。 |
pg_hint_plan | 强制 query plan — 性能问题大多是索引缺失 + 数据形状不对,不是 planner bug;先 EXPLAIN 再说。 |
规划中的扩展支持
multi-region(规划中):每个 region 独立的 Postgres,扩展配置同步。
enterprise(规划中):客户自带 RDS,可以装任何扩展;Mortar 控制平面只查
pg_extension 系统视图判断启用项,不强制版本。
参考
rag-cookbook.md— pgvector 完整 RAG 流程full-text-search.md— FTS + zhparserarchitecture.md§ database primitive