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.mdrag_optimization.md)。

  • “schema 随便,存 JSON 就完了。” ✅ Postgres 强类型,核心业务字段仍该用 schema.md 规范建表;JSONB 适合灵活/嵌套数据,但滥用会丢约束、难查询。

5. 延伸阅读 / 关联概念