2026年PostgreSQL入门保姆级教程:从零看懂最强开源数据库
2026年PostgreSQL入门保姆级教程:从零看懂最强开源数据库
摘要: 你是否在MySQL和PostgreSQL之间纠结?听说PostgreSQL很强大但不知道从哪下手?这篇文章用10个生活化比喻+完整实战代码+横向对比表,带你从零认识PostgreSQL。读完你会知道:PostgreSQL到底是什么、它为什么被称作"开源数据库之王"、以及如何从安装到写出第一条SQL,全程不超过30分钟。
一、为什么你应该关心 PostgreSQL?
你很可能处在这种状态:打开招聘网站,后端岗位齐刷刷写着"熟悉PostgreSQL优先";逛技术社区,发现越来越多项目把默认数据库从MySQL换成了PostgreSQL;跟同行聊天,对方说"我们公司去年全面迁移到了PG"——你心里咯噔一下:是不是该学一下PostgreSQL了?
Stack Overflow 2025年开发者调查显示,PostgreSQL以 48.7%的使用率首次超过MySQL(42.3%),成为全球开发者最常用的数据库。DB-Engines 2026年4月排名中,PostgreSQL连续第3年被评为"年度数据库"(DBMS of the Year),是全球增长最快的关系型数据库,没有之一。
这篇文章不会让你成为DBA专家,但我保证:看完它,你将彻底理解PostgreSQL是什么、它为什么火、以及能自己动手完成安装到增删改查的全流程。 我们先从"数据库是什么"聊起,一步步深入,最后给你一条清晰的学习路线。
二、PostgreSQL 是什么?——用生活比喻讲明白
2.1 数据库是什么?
想象你开了一家快递驿站。每天有成百上千个包裹进出。一开始你用本子记:“张三的包裹在第3排第2层”。但随着包裹越来越多——500个、5000个、50000个——你翻本子的时间比送包裹的时间还长。
数据库就是那个帮你管理数据的"超级本子"。 它不仅能存数据,还能秒查、自动排序、防止记错。你告诉它"找出张三的所有包裹",它0.01秒就能给你结果——哪怕有100万条记录。
一句话总结: 数据库 = 一个能存数据、查数据、管数据的高效电子仓库。
2.2 PostgreSQL 是谁?
如果把数据库世界比作汽车市场:
- MySQL 像丰田卡罗拉——省油、可靠、到处都在用,但你要改装一下才能跑赛道
- MongoDB 像特斯拉——理念新颖,但不适合所有路况
- PostgreSQL 像一辆保时捷卡宴——豪华、全能,能跑高速也能越野,而且它是开源的,等于免费送
PostgreSQL(读作"post-gress-Q-L",简称PG)诞生于1986年加州大学伯克利分校,至今已有近40年历史。它是世界上功能最丰富的开源关系型数据库,支持标准的SQL语言,同时扩展了JSON文档存储、全文搜索、地理空间数据等高级功能。超过1800个第三方扩展让它几乎什么都能干。
一句话总结: PostgreSQL 是一个免费、开源、功能顶配的企业级数据库,既有老牌数据库的稳定,又有现代数据库的灵活。
三、PostgreSQL 的独特优势——和MySQL比到底强在哪?
很多人问的第一个问题就是:“PG和MySQL有什么区别?我该学哪个?”
下面这张表把核心差异说清楚:
| 对比维度 | PostgreSQL | MySQL | 对小白意味着什么? |
|---|---|---|---|
| SQL标准遵循 | ✅ 几乎100%遵循SQL标准 | ⚠️ 约70%,有不少"方言" | 学PG写SQL = 学标准SQL,去哪都能用 |
| 数据类型 | 支持数组、JSON、范围、几何等30+种 | 基础类型为主 | PG一个数据库能干更多活 |
| JSON支持 | 原生JSONB,支持索引和查询 | JSON是简单的文本存储 | PG里操作JSON和操作普通表一样快 |
| 全文搜索 | 内置,支持中文分词 | 需借助第三方引擎(如Elasticsearch) | PG自带搜索引擎能力 |
| 扩展生态 | 1800+扩展,PostGIS、Citus等 | 扩展较少 | PG装个扩展就能处理地理数据、时序数据 |
| 事务隔离 | 默认最高级别,无脏读 | 默认可重复读,有坑 | PG数据更安全,不会读到"半截"数据 |
| 并发能力 | MVCC机制,读写互不阻塞 | 依赖存储引擎,有锁竞争 | 高并发场景PG表现更稳 |
| 许可证 | PostgreSQL License(极度宽松) | GPL(有限制) | PG闭源商用也没问题 |
| 学习曲线 | 稍陡,但学完一通百通 | 平缓,但容易养成"方言"习惯 | 先难后易 vs 先易后难 |
PG的3个核心优势用一个比喻来说: 它就像一把瑞士军刀——你本以为它只是一把刀(关系型数据库),拉开发现还有剪刀(JSON文档存储)、开瓶器(全文搜索)、螺丝刀(地理空间数据)、放大镜(窗口函数分析)。一个工具,解决N类问题。
当然,PG也不是万能的。它的弱项在于:
- 简单读写场景下,MySQL的部署和维护更轻量(PG的配置调优更复杂)
- 对新手的第一印象不太友好——默认配置偏保守,需要手动调参
- 集群方案(水平扩展)比MySQL的成熟方案少,虽然Citus正在改善这一点
四、PostgreSQL 核心概念——用Excel做类比
如果你用过Excel,PostgreSQL的核心概念你能秒懂:
| 数据库概念 | Excel类比 | 说明 |
|---|---|---|
| 数据库(Database) | 一个Excel文件(如"公司数据.xlsx") | 存放所有相关数据的容器 |
| 表(Table) | Excel里的一个Sheet页 | 比如"员工表"是一张Sheet |
| 行(Row) | Sheet里的一行数据 | 一条具体记录,比如"张三的所有信息" |
| 列(Column) | Sheet里的一列 | 一种数据类型,比如"姓名"这一整列 |
| 主键(Primary Key) | 每一行的编号(第1行、第2行…) | 唯一标识每一条记录 |
| 索引(Index) | Excel的Ctrl+F搜索目录 | 加快查找速度的"目录页" |
| SQL | Excel的操作命令(筛选、排序、汇总) | 你跟数据库对话的语言 |
四个关键概念深入解读
① 表(Table)——数据住的"房间"
不要把表想象成复杂的数据库术语。它就是你熟悉的表格:上面是列名(姓名、年龄、部门),下面是数据。一张表只存一类东西——员工表只存员工,订单表只存订单。表结构的"设计"是数据库最重要的基本功,比你掌握100条SQL命令都关键。
一句话总结: 表 = 一个有固定列的Excel Sheet,存同一类数据。
② SQL——和数据库说话的语言
SQL(Structured Query Language)是你对数据库下达指令的方式。你不需要告诉数据库"怎么查"(打开文件→遍历→比较→返回),你只需要告诉它"查什么"(找出年龄大于30的员工)。数据库自己会决定最高效的执行方式。这是SQL最大的魅力——声明式编程,你只要说"要什么",不用管"怎么做"。
一句话总结: SQL = 用接近英语的方式告诉数据库你要什么,它自己搞定怎么办。
③ 索引(Index)——书的目录
一本书有500页,要找到"窗口函数"这个主题,你不会从第1页翻到第500页。你会先看目录。索引就是数据库的目录——为一个列建了索引,查这个列的速度能从"翻500页"变成"翻1页"。但索引不是免费的:每个索引会让写入(INSERT/UPDATE)慢5%-15%,因为它要同步更新目录。索引是典型的"用空间换时间"。
一句话总结: 索引 = 数据的目录,读得飞快但写的时候要额外维护。
④ 事务(Transaction)——银行转账的"保险"
你给朋友转账100块:你的账户扣100,朋友的账户加100。两步必须同时成功或同时失败——不能出现你的钱扣了但朋友没收到的情况。事务就是这个"要么全做,要么全不做"的保险机制。PostgreSQL的事务机制(MVCC)在业内公认是最严谨的——MySQL在并发环境下可能出现幻读,PostgreSQL默认就不会。
一句话总结: 事务 = 一组操作要么全部成功要么全部回滚,保证数据不会"半吊子"。
五、实战动手:从安装到第一条SQL
环境说明: 本文以Ubuntu/Debian(apt)和macOS(brew)为例,Windows用户建议使用WSL2或Docker安装。
5.1 安装 PostgreSQL
Ubuntu/Debian:
# 1. 添加官方APT仓库(安装最新版,截至2026年4月最新稳定版为PG 17)
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
# 2. 安装
sudo apt update
sudo apt install postgresql-17 -y
# 3. 启动服务
sudo systemctl start postgresql
sudo systemctl enable postgresql # 设置开机自启
macOS:
# 一条命令搞定
brew install postgresql@17
# 启动服务
brew services start postgresql@17
验证安装:
# 切换到postgres系统用户
sudo -u postgres psql
# 看到这个提示符,说明安装成功!
# postgres=#
5.2 创建你的第一个数据库和表
-- 进入PostgreSQL命令行后,依次执行以下命令
-- 1. 创建新用户(你的个人账号)
CREATE USER myuser WITH PASSWORD 'MySecurePass123';
-- 2. 创建数据库,并指定myuser为拥有者
CREATE DATABASE mydb OWNER myuser;
-- 3. 退出当前psql,用新用户重新登录
-- \q 退出
-- psql -U myuser -d mydb 在终端执行这行重新登录
-- 4. 创建第一张表:一个简易图书管理系统
CREATE TABLE books (
id SERIAL PRIMARY KEY, -- 自增主键,自动生成ID
title VARCHAR(200) NOT NULL, -- 书名,最长200字,不能为空
author VARCHAR(100) NOT NULL, -- 作者
price NUMERIC(8,2), -- 价格,总8位,小数2位(如999999.99)
published_year INT, -- 出版年份
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 创建时间,自动填入
);
5.3 增删改查(CRUD)——数据库四大基本功
-- ========== C:增(INSERT)==========
-- 插入一本书
INSERT INTO books (title, author, price, published_year)
VALUES ('深入浅出PostgreSQL', '李华', 89.90, 2025);
-- 批量插入多本书
INSERT INTO books (title, author, price, published_year) VALUES
('数据库系统概念', 'Abraham Silberschatz', 128.00, 2023),
('高性能MySQL', 'Baron Schwartz', 108.00, 2024),
('PostgreSQL实战', '王明', 79.00, 2025);
-- ========== R:查(SELECT)——最常用的操作 ==========
-- 查看所有图书
SELECT * FROM books;
-- 查询价格低于100元的书
SELECT title, price FROM books WHERE price < 100;
-- 按出版年份倒序排列
SELECT title, author, published_year
FROM books
ORDER BY published_year DESC;
-- 统计每个年份出了几本书
SELECT published_year, COUNT(*) AS 数量
FROM books
GROUP BY published_year;
-- ========== U:改(UPDATE)——别忘了WHERE! ==========
-- 把某本书的价格上调10%
UPDATE books SET price = price * 1.1 WHERE title = '深入浅出PostgreSQL';
-- ⚠️ 如果忘记WHERE,会把所有书的价格都改掉!
-- UPDATE books SET price = 100; ← 灾难!千万加WHERE
-- ========== D:删(DELETE)——同样别忘了WHERE! ==========
-- 删除某一本书
DELETE FROM books WHERE title = '高性能MySQL';
-- ⚠️ DELETE FROM books; ← 删全表!生产环境别这么干
小技巧: 增删改操作后,执行
SELECT * FROM books;确认一下结果。这是初学者最重要的好习惯。
六、PostgreSQL 的"杀手锏"功能
这才是PG真正闪耀的地方。每个功能用一句话说明它是什么:
6.1 JSON支持(JSONB)
一句话: 你可以像操作表格一样高效地查询和索引JSON数据,不用额外装MongoDB。
-- 把一个JSON文档存进去
INSERT INTO books (title, author, price, published_year) VALUES
('技术杂谈', '{"name": "王五", "email": "wang@example.com"}'::jsonb, 59.00, 2025);
6.2 全文搜索
一句话: 内置搜索引擎,支持中文分词、相关度排序,小项目不需要引入Elasticsearch。
-- 搜索书名中包含"PostgreSQL"的书,按相关度排序
SELECT title, ts_rank(to_tsvector('chinese', title), query) AS 相关度
FROM books, to_tsquery('chinese', 'PostgreSQL') query
WHERE to_tsvector('chinese', title) @@ query;
6.3 地理空间数据(PostGIS扩展)
一句话: 地球上任意两个坐标之间的距离计算、区域查询,几行SQL搞定,打车软件和地图应用的核心能力。
-- 开启PostGIS扩展后,查询某点周围5公里内的店铺
-- SELECT name FROM shops
-- WHERE ST_DWithin(location, ST_MakePoint(116.4, 39.9)::geography, 5000);
6.4 窗口函数
一句话: 在不合并数据行的情况下,计算排名、累计、移动平均等分析指标,比普通GROUP BY灵活10倍。
-- 给每本书按价格排名(不改变表的行数!)
SELECT title, price,
RANK() OVER (ORDER BY price DESC) AS 价格排名
FROM books;
6.5 CTE(公用表表达式)
一句话: 把复杂的查询拆成一个个"子步骤",像搭积木一样清晰可读地组装数据流水线。
-- 先筛选出2025年的书,再从中找价格最高的
WITH books_2025 AS (
SELECT * FROM books WHERE published_year = 2025
)
SELECT title, price FROM books_2025
WHERE price = (SELECT MAX(price) FROM books_2025);
金句时刻:PostgreSQL的强大不在于它有多少功能,而在于这些功能可以在一条SQL里组合使用——你不需要切换到另一个系统。
七、PostgreSQL 适合什么场景?
| 场景 | 推荐PG吗? | 说明 |
|---|---|---|
| 数据一致性要求高的系统(金融、订单) | ✅ 强烈推荐 | PG的事务和约束是最严格的 |
| 需要同时处理关系数据和JSON数据 | ✅ 强烈推荐 | 一个数据库当两个用 |
| 涉及地理位置的业务(LBS、物流) | ✅ 强烈推荐 | PostGIS是行业标准 |
| 复杂报表和数据分析 | ✅ 强烈推荐 | 窗口函数、CTE让分析SQL更好写 |
| 简单的博客/个人小站 | ⚠️ 可选 | PG完全可以,但MySQL更轻(小内存机器) |
| 纯键值缓存(如Redis场景) | ❌ 不推荐 | 这不是PG的设计初衷 |
| 日志/时序数据海量写入 | ⚠️ 可选 | TimescaleDB扩展可以,但专用时序库更优 |
一句话选型口诀: 如果你不确定选什么数据库,选PostgreSQL大概率不会后悔。只有当资源极度紧张(<512MB内存VPS)或团队只有MySQL经验时,MySQL可能是更现实的选择。
八、常见问题 & 避坑指南
❓ Q1:PostgreSQL 和 MySQL,我该学哪个?
A: 如果你刚入门,建议学PostgreSQL。 原因很简单:PG更遵循SQL标准,你学到的SQL知识在Oracle、SQL Server上也能用;而MySQL的"方言"习惯一旦养成,切换到其他数据库会很不适应。先学标准,再学方言,这个顺序事半功倍。
❓ Q2:PG安装后改密码报错?
新手最容易踩的坑:PostgreSQL默认使用 ident 认证(用系统用户匹配),而非密码认证。
# 解决方法:编辑pg_hba.conf,把认证方式从peer/ident改为md5
sudo vi /etc/postgresql/17/main/pg_hba.conf
# 找到这行:
# local all all peer
# 改成:
# local all all md5
# 重启生效:
sudo systemctl restart postgresql
❓ Q3:为什么我的查询这么慢?
90%的情况是没建索引。 一张100万数据的表,没索引的 WHERE 查询可能耗时5-10秒,建索引后降到1-5毫秒——快了1000倍。但也有反例:索引建太多(比如一张表建20个索引),每次插入数据都会慢5-15%。建索引是门艺术:只为WHERE和JOIN中频繁出现的列建索引。
❓ Q4:PostgreSQL 能处理多少数据量?
单节点PostgreSQL在合理配置下可以轻松处理1亿+行数据。Instagram在2016年就管理着数十亿级别的数据。但当单表超过500GB或写入QPS超过10万时,需要考虑分区、读写分离或分布式方案(Citus)。
九、总结 + 下一步学习路线
核心要点回顾
- PostgreSQL是世界上最先进的开源关系型数据库——近40年积累,功能最全、标准最严、扩展最多
- MySQL是卡罗拉,PostgreSQL是卡宴——都是好车,但定位不同
- 学PG = 学标准SQL——一次学习,到处能用
- PG的JSON + 全文搜索 + PostGIS + 窗口函数让它一个工具解决N类问题
- 入门只需掌握:安装→建库建表→增删改查→索引→事务,这6个概念覆盖80%日常场景
PostgreSQL最大的"缺点"是它太强了,强到初学者不知道从哪下手。但一旦入门,你会发现:原来一个数据库就能解决以前需要三四个工具才能搞定的事。
你的下一步学习路线
第1周:熟练CRUD + WHERE/JOIN/GROUP BY
第2周:理解事务、索引、约束
第3周:学习窗口函数 + CTE
第4周:探索扩展生态(PostGIS/Citus/pgvector)
推荐资源:
- 📖 官方文档:postgresql.org/docs/17/(中文版可用deepl翻译)
- 🎥 《PostgreSQL:The SQL Master》——YouTube上最好的入门系列
- 📘 《PostgreSQL即学即用》第4版——最好的中文入门书
你正在用哪个数据库?有没有考虑过迁移到PostgreSQL?欢迎在评论区聊聊你的技术栈和选型故事——每一条我都会认真看!🐘
本文环境:PostgreSQL 17.x,测试于Ubuntu 24.04 | 2026年4月
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)