PostgreSQL(Postgres)
1. 定义
PostgreSQL 是一个开源对象关系型数据库(ORDBMS),以标准兼容、功能丰富、扩展性强著称,常被称为”最先进的开源 SQL 数据库”。它既能当传统关系库,也能存 JSON、数组、自定义类型,甚至兼当向量库。
类比:如果说 SQLite 是”随身笔记本”(单文件、轻量),Postgres 就是”带图书管理员的图书馆”——多人并发、有完整权限体系、能扩展出各种专柜(JSON 柜、地理柜、向量柜)。
关联:和
sqlite-turso.md同属关系型数据库,但架构不同(客户端-服务器 vs 嵌入式);它也是sql-rag.md里”自然语言查库”最常见的后端。
2. 核心概念
| 概念 | 含义 |
|---|---|
| ORDBMS | 关系模型 + 对象特性:支持 JSONB、数组、自定义类型、表继承 |
| ACID + MVCC | 多版本并发控制:读不阻塞写、写不阻塞读,天然支持”快照隔离” |
| 扩展 (Extensions) | 通过 CREATE EXTENSION 加能力,如 pgvector(向量)、postgis(地理) |
| 角色与权限 | 用 ROLE 统一管用户/组,权限粒度到库/表/列,比 MySQL 的 user+db 模型更灵活 |
| WAL | 预写日志(Write-Ahead Log):先写日志再改数据,保证崩溃可恢复、支撑流复制 |
-- 建表(强类型,靠 schema 约束,见 schema.md)
CREATE TABLE user (id SERIAL PRIMARY KEY, name TEXT NOT NULL, active BOOLEAN);
-- 兼当向量库(pgvector):RAG 不必另起一个向量服务
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE doc (id SERIAL PRIMARY KEY, embedding vector(1536));3. 和 MCP / RAG 的关系
- Postgres MCP Server:把库暴露成模型能调用的工具,你用自然语言就能查库——这正是
sql-rag.md的”零代码接入”形态,也是mcp.md的 postgres 例子。 - pgvector:让 Postgres 直接存向量、做相似度检索,经典 RAG 的向量库可以被 Postgres 吃掉,不必单独维护 Pinecone/Weaviate(见
rag_optimization.md)。
4. 常见误区
-
❌ “Postgres 和 MySQL 差不多,随便换。” ✅ 两者都流行但取向不同:Postgres 更严格遵循 SQL 标准、类型/扩展更丰富、默认更严谨;MySQL 更轻、 historically 更快上手。迁移不是改个连接串就完事。
-
❌ “做 RAG 必须单独部署一个向量数据库。” ✅ 用
pgvector扩展,Postgres 自己就能存向量、做 ANN 检索,中小型 RAG 一个库全包(见sql-rag.md、rag_optimization.md)。 -
❌ “schema 随便,存 JSON 就完了。” ✅ Postgres 强类型,核心业务字段仍该用
schema.md规范建表;JSONB 适合灵活/嵌套数据,但滥用会丢约束、难查询。
5. 延伸阅读 / 关联概念
- SQLite / Turso — 嵌入式 vs 客户端-服务器架构对比;见
sqlite-turso.md - schema — Postgres 的表结构/类型/约束;见
schema.md - ER 图 — 建库前的概念建模;见
er-diagram.md - SQL RAG — 用 Postgres 当 RAG 检索源(Text2SQL);见
sql-rag.md - MCP — postgres MCP Server 把库变自然语言工具;见
../ai-agent-guide/mcp.md - RAG 优化 — 向量检索/混合检索;见
../ai-agent-guide/rag_optimization.md