返回主页 学习路径
PostgreSQL
SQL 标准的模范生 · 企业级首选
PostgreSQL 是由 PostgreSQL 全球开发组开发的开源关系数据库系统,被称为"世界上最先进的开源数据库"。它支持 SQL 标准的绝大部分特性,拥有强大的 JSON 支持、全文搜索、地理空间(PostGIS)、窗口函数、外键、事务(ACID)、MVCC 等特性。PostgreSQL 是苹果、Uber、Spotify、Instagram 等众多科技公司的核心数据存储选择,在开源社区中备受推崇。
开源数据库之王 · 功能最强
📅 诞生时间1986年 · Michael Stonebraker / UC Berkeley
🧩 类型关系型 · 对象-关系
📊 语言结构化查询语言(SQL)
⚡性能
9/10
📦生态
8/10
🧠易用
6/10
🚀扩展性
7/10

📑 本文目录

📌 第一部分:PostgreSQL 概览与定位

1.1 定义与全称

PostgreSQL(简称 Postgres)是一种功能强大的开源对象-关系数据库系统,由 PostgreSQL 全球开发组维护。它最初由 Michael Stonebraker 领导的 POSTGRES 项目于 1986 年在加州大学伯克利分校开始开发,1996 年以 PostgreSQL 的名称正式开源发布。

1.2 核心定位

PostgreSQL 的核心定位是 "世界上最先进的开源数据库"。它提供了:

1.3 主要应用领域

1.4 知名案例


📜 第二部分:PostgreSQL 的历史与发展演进

2.1 诞生背景(1986年)

PostgreSQL 的前身是 POSTGRES 项目,由 Michael Stonebraker 于 1986 年在加州大学伯克利分校领导开发。POSTGRES 的目标是 扩展关系数据库模型,支持复杂数据。1996 年,项目更名为 PostgreSQL,并正式开源发布。

2.2 关键版本里程碑

2.3 设计哲学


⚙️ 第三部分:PostgreSQL 核心特性

3.1 数据类型

3.2 JSON 操作

-- 创建 JSON 列
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    data JSONB
);

-- 插入 JSON 数据
INSERT INTO users (data) VALUES
    ('{"name": "Alice", "age": 30, "city": "Beijing"}'),
    ('{"name": "Bob", "age": 25, "city": "Shanghai"}');

-- 查询 JSON 字段
SELECT data->>'name' AS name FROM users;
SELECT data @> '{"city": "Beijing"}' FROM users;

-- JSONB 索引(加速查询)
CREATE INDEX idx_users_data ON users USING GIN (data);

-- JSON 聚合
SELECT json_agg(data) FROM users;

3.3 全文搜索

-- 创建全文搜索向量列
CREATE TABLE articles (
    id SERIAL PRIMARY KEY,
    title TEXT,
    content TEXT,
    tsvector TSVECTOR
);

-- 生成搜索向量
UPDATE articles SET tsvector = 
    setweight(to_tsvector('english', title), 'A') ||
    setweight(to_tsvector('english', content), 'B');

-- 全文搜索查询
SELECT * FROM articles
WHERE tsvector @@ to_tsquery('english', 'postgresql & database');

-- 创建 GIN 索引加速
CREATE INDEX idx_articles_tsvector ON articles USING GIN (tsvector);

-- 显示排名
SELECT title, ts_rank(tsvector, query) AS rank
FROM articles, to_tsquery('postgresql') query
WHERE tsvector @@ query
ORDER BY rank DESC;

3.4 窗口函数

-- 排名
SELECT name, salary,
    RANK() OVER (ORDER BY salary DESC) AS rank,
    DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank
FROM employees;

-- 分组排名
SELECT name, department, salary,
    RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS dept_rank
FROM employees;

-- 累计聚合
SELECT date, revenue,
    SUM(revenue) OVER (ORDER BY date) AS cumulative_revenue
FROM sales;

-- 移动平均
SELECT date, value,
    AVG(value) OVER (ORDER BY date ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING) AS moving_avg
FROM stock_prices;

3.5 分区与分片

-- 声明式分区(PostgreSQL 10+)
CREATE TABLE orders (
    id SERIAL,
    order_date DATE,
    amount DECIMAL
) PARTITION BY RANGE (order_date);

-- 创建分区
CREATE TABLE orders_2023_01 PARTITION OF orders
    FOR VALUES FROM ('2023-01-01') TO ('2023-02-01');
CREATE TABLE orders_2023_02 PARTITION OF orders
    FOR VALUES FROM ('2023-02-01') TO ('2023-03-01');

-- 插入数据自动路由到对应分区
INSERT INTO orders (order_date, amount) VALUES ('2023-01-15', 100.50);

3.6 复制与高可用

3.7 扩展生态


⚖️ 第四部分:PostgreSQL 与其他数据库对比

4.1 PostgreSQL vs MySQL

4.2 PostgreSQL vs MongoDB

4.3 PostgreSQL vs Oracle

4.4 PostgreSQL vs SQLite


🧠 第五部分:学习建议

1
基础入门

PostgreSQL 安装、基础 SQL、数据类型、约束

2
核心进阶

索引、视图、事务、JSON 操作、窗口函数

3
高级特性

存储过程、触发器、分区、流复制、全文搜索

4
生态与扩展

PostGIS(GIS)、TimescaleDB(时序)、pgvector(AI)、Citus(分布式)

推荐学习资源


🎯 总结升华

PostgreSQL 是开源数据库的"终极答案"。

它不仅是功能最全面的开源数据库,更是 SQL 标准的模范生。PostgreSQL 的 JSONB 支持让它兼具 NoSQL 的灵活性,PostGIS 扩展让它在地理信息领域无可替代。

对于新项目,PostgreSQL 应该是最优先考虑的关系数据库。它正在逐步取代 MySQL 和 Oracle,成为企业级应用的首选开源数据库。

"PostgreSQL 是数据库世界的瑞士军刀。" 🐘

🔖 相关标签
#开源数据库 #关系型 #JSONB #PostGIS #全文搜索 #ACID #MVCC
📄 本文档为 PostgreSQL 完整白皮书 · 最后更新于 2026年06月28日