C 关系型数据库 生产就绪 ★ DB-Engines #1 开源

PostgreSQL

世界上最先进的开源关系型数据库 — 以标准合规、可扩展性和数据完整性著称

2026-05-15 postgresql.org 综合评分:⭐⭐⭐⭐⭐

为什么需要它

PostgreSQL 是一个对象-关系型数据库管理系统 (ORDBMS),拥有超过 35 年的活跃开发历史。它不仅仅是一个存储数据的容器 — 它是一个可扩展的数据平台,通过扩展可以变成向量数据库、时序数据库、地理信息系统、全文搜索引擎,甚至图数据库。

一句话定位:当你需要一个"什么都能做"的数据库,PostgreSQL 几乎总是对的答案。

核心价值主张

PostgreSQL 的哲学是 "one database to rule them all" — 通过扩展机制,你可以在同一个数据库实例中同时运行关系型查询、JSON 文档存储、向量相似性搜索、地理空间查询和时序数据分析,而无需引入多个专用数据库。

核心优势

1. 标准合规性最强

PostgreSQL 是所有主流开源数据库中 SQL 标准合规性最高的。它支持 SQL:2023 标准的大部分特性,包括窗口函数、CTE (WITH 查询)、MERGE 语句、JSON 表函数等。如果你重视可移植性和标准写法,PG 是最佳选择。

2. 扩展机制无可匹敌

PostgreSQL 的 CREATE EXTENSION 系统允许你像安装插件一样添加全新功能:

这些扩展可以在同一个实例中共存,互不冲突。

3. 数据完整性最强

PostgreSQL 提供最完整的约束系统:CHECK 约束、外键、排他约束 (EXCLUDE)、行级安全策略 (RLS)、表继承。它的 MVCC 实现意味着读写互不阻塞,且严格遵守 ACID 语义。

4. JSON 支持成熟

PostgreSQL 的 JSONB 类型不是简单的文本存储 — 它是二进制格式、支持 GIN 索引、可直接在 SQL 中用 ->>@> 操作符查询。2026 年的基准测试显示,PostgreSQL 的 JSON 查询性能是 MySQL 的 3.7 倍

5. 完全开源,无厂商锁定

PostgreSQL 使用 PostgreSQL 许可证(类 MIT),完全自由使用、修改和分发。没有企业版/社区版之分,所有功能对所有用户开放。云厂商(AWS RDS/Aurora、GCP Cloud SQL、Azure Database)都提供托管服务。

关键特性

特性类别具体能力
事务与并发MVCC 多版本并发控制,读写不阻塞;SAVEPOINT 嵌套事务;可序列化快照隔离 (SSI)
数据类型JSON/JSONB、数组、范围类型、几何类型、网络地址、UUID、枚举、复合类型、域类型
索引类型B-tree、Hash、GiST、SP-GiST、GIN、BRIN、Bloom、覆盖索引、部分索引、表达式索引
查询能力窗口函数、CTE 递归查询、LATERAL JOIN、MERGE、全文搜索 (tsvector)、JSON 路径查询
复制与高可用物理流复制、逻辑复制 (Pub/Sub)、级联复制、同步/半同步复制、pg_basebackup 增量备份
安全行级安全策略 (RLS)、列级权限、SSL/TLS 加密、SCRAM-SHA-256 认证、pg_hba.conf 正则匹配
可编程性PL/pgSQL、PL/Python、PL/Perl、PL/Tcl、PL/V8 (JavaScript)、触发器、事件触发器、规则系统
可观测性pg_stat_statements、pg_stat_io (v16+)、pg_wait_events (v17+)、EXPLAIN ANALYZE、自动统计收集
分区声明式分区(范围/列表/哈希)、自动分区管理 (pg_partman)
SQL/JSON (v17)JSON_TABLE、JSON_SCALAR、JSON_SERIALIZE、IS JSON 约束

PostgreSQL 16/17 新特性亮点

扩展生态

PostgreSQL 最大的架构优势是其扩展生态系统。扩展让你在同一数据库中添加专用能力,无需引入额外基础设施。

扩展类别用途安装方式
pgvectorAI/向量向量相似性搜索,支持 IVFFlat 和 HNSW 索引CREATE EXTENSION vector
PostGIS地理空间300+ 空间函数,OGC 标准,支持 QGIS/GeoServerCREATE EXTENSION postgis
TimescaleDB时序数据Hypertable 自动分区,压缩,连续聚合独立包安装
pg_stat_statements监控查询性能跟踪,执行统计shared_preload_libraries
pg_cron调度数据库内定时任务调度shared_preload_libraries
pg_partman分区管理自动创建和管理分区表CREATE EXTENSION pg_partman
Citus水平扩展跨节点水平分片,分布式查询独立包安装
pgvectorscaleAI/向量增强与 pgvector 配合,StreamingDiskANN 索引独立包安装
pg_trgm模糊搜索三元组相似度匹配,模糊文本搜索CREATE EXTENSION pg_trgm
pgcrypto安全加密函数(PGP、哈希、随机数)CREATE EXTENSION pgcrypto

扩展组合使用:你可以在同一个 PostgreSQL 实例中同时运行 pgvector + TimescaleDB + PostGIS。它们操作不同的数据类型,互不冲突。同一个连接、同一份备份、同一套运维 — 这就是"多合一数据库"的真正含义。

pgvector — AI 时代的杀手级扩展

pgvector 让 PostgreSQL 变成向量数据库,支持存储和查询 Embedding 向量。在 RAG(检索增强生成)架构中,你可以直接在关系数据库中做语义搜索:

-- 创建向量列
CREATE TABLE documents (
    id SERIAL PRIMARY KEY,
    content TEXT,
    embedding VECTOR(1536)  -- OpenAI ada-002 维度
);

-- 创建 HNSW 索引
CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops);

-- 语义搜索:找到最相似的文档
SELECT content, embedding <=> '[0.1, 0.2, ...]'::vector AS distance
FROM documents
ORDER BY distance
LIMIT 5;

基准测试数据:pgvector + pgvectorscale 在 5000 万向量数据集上实现 471 QPS @ 99% 召回率,p95 延迟比 Pinecone 低 28 倍,吞吐量高 16 倍,成本低 75%。

PostGIS — 地理空间之王

PostGIS 是 PostgreSQL 最成熟的扩展之一,为 OpenMapData 等开源地理项目提供底层支持:

-- 创建带地理空间数据的表
CREATE TABLE stores (
    id SERIAL PRIMARY KEY,
    name TEXT,
    location GEOGRAPHY(POINT, 4326)
);
CREATE INDEX ON stores USING GIST (location);

-- 查找 5km 范围内的店铺
SELECT name,
       ST_Distance(location, ST_MakePoint(-73.99, 40.73)::geography) AS distance_m
FROM stores
WHERE ST_DWithin(location, ST_MakePoint(-73.99, 40.73)::geography, 5000)
ORDER BY distance_m;

性能表现

基准测试数据

场景指标数据来源
COPY 批量加载v16 提升高达 300%,v17 大行 COPY 快 2 倍PostgreSQL 官方发布说明
JSON 查询比 MySQL 快 3.7 倍2026 年基准测试
向量搜索 (pgvector)5000 万向量,471 QPS @ 99% 召回率Timescale 基准测试
并行查询v17 并行查询性能提升 35%PostgreSQL 17 发布说明
B-tree 扫描v17 流式 I/O 显著加速PostgreSQL 17 发布说明
写入吞吐v17 高并发下写入性能提升PostgreSQL 17 发布说明

关键调优参数

-- postgresql.conf 关键性能参数
shared_buffers = '4GB'              -- 通常设为系统内存的 25%
effective_cache_size = '12GB'        -- 通常设为系统内存的 75%
work_mem = '256MB'                   -- 排序/哈希操作内存
maintenance_work_mem = '1GB'         -- VACUUM/CREATE INDEX 内存
wal_buffers = '64MB'                 -- WAL 缓冲区
max_wal_size = '4GB'                 -- WAL 最大大小
checkpoint_completion_target = 0.9   -- 检查点平滑写入
random_page_cost = 1.1               -- SSD 存储设为 1.1(HDD 为 4.0)
effective_io_concurrency = 200       -- SSD 并发 I/O
max_parallel_workers_per_gather = 4  -- 并行查询 worker 数

快速上手

安装

# Ubuntu/Debian
sudo apt install postgresql postgresql-contrib

# macOS (Homebrew)
brew install postgresql@17
brew services start postgresql@17

# Docker(推荐开发环境)
docker run -d --name postgres \
  -e POSTGRES_PASSWORD=mysecretpassword \
  -p 5432:5432 \
  postgres:17

# Windows
# 下载安装器:https://www.postgresql.org/download/windows/

基础操作

-- 创建数据库和用户
CREATE DATABASE myapp;
CREATE USER appuser WITH PASSWORD 'secret';
GRANT ALL PRIVILEGES ON DATABASE myapp TO appuser;

-- 连接数据库
-- \c myapp

-- 创建表(演示高级特性)
CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    price NUMERIC(10,2) CHECK (price > 0),
    tags TEXT[] DEFAULT '{}',                -- 数组类型
    metadata JSONB DEFAULT '{}',             -- JSONB 类型
    created_at TIMESTAMPTZ DEFAULT NOW(),
    search_vector TSVECTOR                  -- 全文搜索向量
);

-- 创建 GIN 索引加速 JSONB 查询
CREATE INDEX idx_products_metadata ON products USING GIN (metadata);
-- 创建 GIN 索引加速全文搜索
CREATE INDEX idx_products_search ON products USING GIN (search_vector);

-- 插入数据
INSERT INTO products (name, price, tags, metadata)
VALUES (
    '机械键盘',
    599.00,
    ARRAY['外设', '键盘'],
    '{"brand": "Keychron", "switches": "brown", "layout": "75%"}'::jsonb
);

-- JSONB 查询
SELECT name, price, metadata->>'brand' AS brand
FROM products
WHERE metadata @> '{"switches": "brown"}';

-- 全文搜索
UPDATE products SET search_vector = to_tsvector('simple', name || ' ' || metadata::text);
SELECT name FROM products WHERE search_vector @@ to_tsquery('simple', '键盘');

连接池配置(生产环境必备)

# 使用 PgBouncer 或 pgcat 作为连接池
# 推荐配置:
# - max_connections: 100-200(PostgreSQL 进程模型,不宜过大)
# - 连接池模式: transaction(推荐)或 session
# - pool_size: CPU 核心数 * 2 + 磁盘数

适用场景

最佳使用场景

场景为什么选 PostgreSQL代表项目
Web 应用后端事务安全、JSON 支持、丰富的 ORM 支持Django、Rails、FastAPI、Spring Boot
AI/ML 应用pgvector 向量搜索、与关系数据共存RAG 系统、推荐引擎、语义搜索
地理空间应用PostGIS 提供工业级空间数据处理地图服务、物流调度、LBS 应用
金融/交易系统严格 ACID、SSI 可序列化隔离支付系统、账务系统、风控
数据分析/BI复杂查询、窗口函数、物化视图数据仓库、报表系统、OLAP
时序数据TimescaleDB 扩展、自动分区IoT 监控、日志分析、指标系统
内容管理系统JSONB 文档存储 + 关系查询Headless CMS、电商产品目录
多租户 SaaSRLS 行级安全、Schema 隔离B2B SaaS 平台

不太适合的场景

场景原因推荐替代
超大规模简单 KV 读写进程模型限制连接数,简单 CRUD 不如 MySQL 轻量MySQL、Redis
极致水平扩展(几十节点)原生不支持自动分片,需 Citus 等扩展CockroachDB、TiDB、YugabyteDB
纯文档数据库需求JSONB 很强但不是 MongoDB 级别的 schema-freeMongoDB
嵌入式/移动端进程模型不适合嵌入SQLite
海量时序写入(万亿级)列式存储更优ClickHouse、InfluxDB
"PostgreSQL 能替代 X 吗?"速查表
替代目标数据规模结论
MongoDBJSONB + GIN 索引大多数混合关系+文档场景可以替代
Pinecone/Weaviatepgvector1000 万向量以下完全可以替代
Elasticsearchtsvector + GIN100 万记录以下关键词搜索可替代
InfluxDBTimescaleDB 扩展中等规模时序数据可替代

已知坑

VACUUM 与表膨胀

MVCC 机制要求定期 VACUUM 回收死元组空间。如果 autovacuum 配置不当或大事务长时间运行,会导致表膨胀、性能下降甚至 XID 回卷风险。

应对:监控 pg_stat_user_tables 的死元组数;合理配置 autovacuum 参数;v17 改进了 VACUUM 内存管理但仍需关注。

连接数限制

PostgreSQL 使用进程模型(每连接一个进程),max_connections 通常不宜超过 200-300。高并发场景必须使用连接池(PgBouncer、pgcat)。

应对:生产环境务必部署连接池;使用 transaction 模式池化连接。

主版本升级复杂

大版本升级需要 pg_dump/pg_restore 或 pg_upgrade。虽然 pg_upgrade 支持就地升级,但逻辑复制槽和订阅的保留有严格前置条件(wal_level=logical、足够的 max_replication_slots 等)。

应对:升级前仔细阅读 Release Notes;在测试环境验证;使用 pg_upgrade --check 先行检查。

写放大与 WAL 开销

MVCC 的每次 UPDATE 实际是 INSERT 新版本 + 标记旧版本删除,加上 WAL 日志写入,写密集场景的 I/O 可能比预期高。

应对:合理设置 fillfactor(频繁更新的表设为 70-90);使用 HOT UPDATE 减少索引维护开销。

DDL 锁与在线变更

部分 DDL 操作(如添加带默认值的列在旧版本、修改类型)会获取排他锁,阻塞所有并发查询。CREATE INDEX CONCURRENTLYADD COLUMN ... DEFAULT(v11+)可以避免锁表。

应对:使用 CONCURRENTLY 选项;大表变更在低峰期执行;考虑使用 pg_repack 在线整理表。

竞品对比

PostgreSQL vs MySQL

维度PostgreSQLMySQL
SQL 标准合规最高,支持高级 SQL 特性基本合规,部分语法有差异
JSON 支持JSONB 二进制 + GIN 索引(3.7x 更快)JSON 类型,索引支持较弱
索引类型9 种(B-tree, Hash, GiST, GIN, BRIN...)4 种(B-tree, Hash, R-tree, Inverted)
扩展性丰富的扩展生态(pgvector, PostGIS...)插件机制较弱
向量搜索pgvector 原生支持MySQL 9.x 新增但生态不成熟
行级安全内置 RLS需中间件实现
物化视图支持不支持
在线 DDL有限(ADD COLUMN, CREATE INDEX CONCURRENTLY)全面(INSTANT, INPLACE 算法)
复制WAL 物理复制 + 逻辑复制Binlog 逻辑复制
连接模型进程模型(需连接池)线程模型(更轻量)
云服务价格略高 5-7%稍低
适用场景复杂查询、数据密集型、AI/空间简单 CRUD、读密集、轻量级

选择建议

选 PostgreSQL 当:你需要复杂查询、严格数据完整性、AI 向量搜索、地理空间处理,或者项目未来可能需要这些能力。新项目 2026 年选择 PostgreSQL 与 MySQL 的比例是 3:1

选 MySQL 当:团队更熟悉 MySQL、应用是简单 CRUD 为主、需要极致的在线 DDL 能力、或者已有成熟的 MySQL 运维体系。

事实上,很多公司同时使用两者:MySQL 处理事务数据(订单、用户),PostgreSQL 处理分析和复杂查询。CDC 同步数据,各取所长。

生态与社区

社区状态

ORM 支持

语言/框架ORM/驱动
PythonSQLAlchemy、Django ORM、Tortoise ORM、Prisma
JavaScript/TypeScriptPrisma、Drizzle、TypeORM、Sequelize、Knex
GoGORM、sqlx、pgx、Ent
JavaHibernate、MyBatis、Spring Data JPA
RustDiesel、SQLx、SeaORM
C#/.NETEntity Framework Core、Dapper、Npgsql

云托管服务

管理工具

生产案例

PostgreSQL 在全球顶级科技公司中广泛使用:

公司使用场景
AppleiCloud 基础设施的核心数据库
Instagram20 亿月活用户数据、社交关系、媒体元数据
Spotify6 亿月活用户的多种存储需求
Reddit5 亿+ 账户,用作 ThingDB(KV 存储)和常规 SQL 数据库
Uber核心业务数据库(后部分迁移至 MySQL,但 PG 仍在使用)
Netflix数据存储和分析
Twitch125 个 OLTP 数据库中大部分运行 PostgreSQL
NASA国际空间站数据管理
Robinhood数据湖基础设施
Skype批处理作业和消息队列

约 11.9% 年收入超 2 亿美元的企业在生产环境使用 PostgreSQL。覆盖制造业、金融服务、商业服务等行业。

引入评估

★★★★★
综合评分:5/5 — 强烈推荐
上手难度
4.0
文档完善度
4.8
社区活跃度
4.9
性能
4.5
稳定性
4.8
扩展生态
4.9
运维复杂度
3.2

引入决策树

成本考量

PostgreSQL 本身免费开源。成本主要来自:

个人备注