PostgreSQL 简介
在动手装环境之前,我们先认识一下 PostgreSQL 到底是什么、为什么值得学、能用它做什么。理解了背景,后面的学习会更有的放矢。
PostgreSQL 是什么?
PostgreSQL(常简称为 Postgres)是一款开源、跨平台、对象-关系型数据库管理系统。它由全球志愿者社区维护,不归任何一家公司所有——这是它与 MySQL(归 Oracle)的重要区别。PostgreSQL 以严谨著称:严格遵守 SQL 标准、对数据类型和约束极其严格、事务可靠性达到金融级。
历史:从伯克利到全球
它的故事可以追溯到 1986 年。图灵奖得主 Michael Stonebraker(也是 Ingres 的作者)在加州大学伯克利分校主导了 POSTGRES 项目,目标是探索"对象关系"模型,用更丰富的类型系统替代当时的 Ingres。1987 年发布了第一个版本,到 1993 年已积累超过 1000 用户。
- 1986 年:Stonebraker 在伯克利启动 POSTGRES 项目(Post-Ingres)。
- 1995 年:两位研究生 Bruce Momjian 和 Vadim Mikheev 给它加上了 SQL 解释器,改名 Postgres95,代码以 BSD 协议开源。
- 1996 年:正式更名为 PostgreSQL,反映它对 SQL 的原生支持,版本号从 6.0 起跳(继承 POSTGRES 的版本号)。
- 今天:已发布到 PostgreSQL 16+,全球数百万部署,被誉为"最强大的开源数据库"。
名字里的 "Postgres" 是 "Post-Ingres"(后 Ingres 时代)的缩写,发音是 "POST-gres",别读成 "postgre SQL"。它的吉祥物是一只蓝色大象 Slim,因此社区里它常以大象符号出现。
核心设计哲学
PostgreSQL 的口号是 "The World's Most Advanced Open Source Relational Database"(世界最先进的开源关系数据库)。它的设计哲学可以概括为一句话:宁可严谨,也不要走捷径。
- 正确性优先:当性能和正确性冲突时,Postgres 几乎总是选择正确性。这让它在金融、电信、医疗等对数据一致性要求极高的领域广受信任。
- SQL 标准至上:完整实现 SQL 标准,很多其他数据库省略的特性(如窗口函数、CTE、CHECK 约束、域类型)它都内置。
- 可扩展:从自定义类型、运算符、函数到外部数据包装器(FDW)和过程语言(PL/pgSQL、PL/Python),扩展机制贯穿到底层。
核心特点一览
- 丰富的数据类型:除基本类型外,原生支持数组、JSON/JSONB、范围类型、键值对(hstore)、UUID、位串、几何类型、网络地址(CIDR、INET)。
- 严格的 ACID 事务:多版本并发控制(MVCC)让读写互不阻塞,提交后的数据即使断电也不丢(WAL 机制)。
- 强大的查询能力:窗口函数、公共表表达式(CTE)、递归查询、LATERAL JOIN、并行查询。
- JSONB + 全文搜索:可以像 MongoDB 一样存文档,又能享受 SQL 的全部能力;内置全文搜索引擎,中小型站点不用上 Elasticsearch。
- 多种索引类型:B-tree、Hash、GIN、GiST、BRIN、SP-GiST,针对不同场景。
- 扩展生态:
CREATE EXTENSION一行就能装上 PostGIS(地理)、pgcrypto(加密)、TimescaleDB(时序)等。 - 逻辑与物理复制:流复制做高可用,逻辑复制做跨版本/跨库同步,订阅-发布模型开箱即用。
- 分区表:原生支持声明式分区(范围、列表、哈希),亿级数据查询也能秒级返回。
先跑两段 SQL 感受一下
连上数据库后,这两段最基础的 SQL 能帮你确认环境:
-- 查看版本,确认连接成功
SELECT version();
-- PostgreSQL 16.1 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu ...) 11.4.0, 64-bit
-- 查看当前数据库
SELECT current_database();
-- postgres
-- 查看当前用户
SELECT current_user;
-- postgres再来一个建表 + 插入 + 查询的完整循环:
-- 创建一张表
CREATE TABLE hello (
id SERIAL PRIMARY KEY,
msg TEXT NOT NULL
);
-- 插入一行
INSERT INTO hello (msg) VALUES ('Hello, Postgres!');
-- 查询
SELECT * FROM hello;
-- id | msg
-- ----+------------------
-- 1 | Hello, Postgres!典型应用场景
哪些公司在用 Postgres?几乎你能想到的所有互联网大厂和传统企业:Apple、Instagram、Spotify、Reddit、Sony、Disney、 Fujitsu,以及国内的阿里云、腾讯云、华为云都有托管产品(RDS for PostgreSQL)。它适合的场景包括:
- OLTP 业务库:电商订单、用户系统、支付流水——可靠的事务保证。
- 地理 / GIS:配合 PostGIS 扩展,做地图、打车、外卖的"附近的人/店"。
- 半结构化数据:埋点事件、商品属性、配置中心,用 JSONB 一列存下灵活文档。
- 时序数据:配合 TimescaleDB,做 IoT 传感器、监控指标存储。
- 数据仓库:配合 Citus 扩展做分布式 OLAP,或用原生并行查询处理中等规模分析。
- 全文搜索:中小型站点的搜索框,不必引入 Elasticsearch。
PostgreSQL vs 其他数据库
- vs MySQL:Postgres 更严格、类型更丰富、JSONB/窗口函数/CTE 更早成熟;MySQL 部署更轻、生态更广(尤其在传统 Web)。新项目对数据一致性要求高时优先选 Postgres。
- vs SQLite:SQLite 是单文件嵌入式数据库,适合 App 本地存储;Postgres 是网络数据库,支持多连接并发。
- vs MongoDB:MongoDB 是纯文档库,无事务(早期);Postgres 用 JSONB 也能存文档,但还能享受完整的事务和 SQL 能力。
- vs Oracle:功能上 Postgres 已能覆盖 Oracle 80%+ 场景,且开源免费;但极致性能、商业支持、特定企业生态仍以 Oracle 为尊。
该不该学 PostgreSQL?
如果你的方向是后端开发、数据工程、运维、GIS、数据分析,Postgres 几乎是必修课。学完本系列,你将能独立设计数据库表结构、写出高效的复杂查询、理解索引与事务原理,并能用 Postgres 替代多款专用数据库(文档库、搜索库、时序库)。
← 返回 PostgreSQL 教程目录
下一篇 PostgreSQL 安装与 psql →