拓展知识
约 1480 字大约 5 分钟
2026-08-25
Postgres的其他能力
| 名称 | 它是做什么的 | 什么场景下关注它 |
|---|---|---|
| 备份与恢复 | 把数据库的数据倒出来存一份(备份),出问题时能从这份存档把数据还原回去(恢复) | 上线后必须考虑备份策略 |
| 锁 | 当多个事务同时读写同一条数据时,锁用来决定谁先谁后,防止数据乱掉 | 高并发写入、秒杀、库存扣减等场景,锁是性能瓶颈的根源 |
| 视图 | 把一条 SQL 查询存成一个「虚拟表」,以后可以直接查它,不用每次都写复杂 SQL | 报表、权限控制、给业务方暴露简化数据接口时 |
| 物化视图 | 和视图类似,但会把查询结果真的存成一张物理表,查起来更快,但数据不是实时最新的 | 大报表、数据仓库、定时刷新的统计看板 |
| 存储过程 | 把多条 SQL 和逻辑写成一个「函数」,存在数据库里,应用端调一次就能跑完所有逻辑 | 业务逻辑全在数据库里跑、批量数据处理、减少应用层网络开销时 |
| 触发器 | 在表上插/改/删数据时,自动执行一段预先写好的逻辑(比如记日志、同步数据) | 审计日志、数据同步、自动更新某些字段(如 updated_at) |
| CTE 表达式 | 写一个临时的命名子查询,让多层嵌套的 SQL 更容易阅读和维护 | 复杂查询拆分、递归查询(树形结构/层级数据) |
| 全文检索 | 让你在大量文本里按「相关性」快速搜索,支持中文分词、权重、高亮,比 LIKE 高效精准 | 站内搜索、文章/商品搜索,任何需要输入框搜内容的场景 |
| GIN / GiST 索引 | 特殊索引类型,用来加速全文检索、JSON、数组、空间地理数据等非标类型的查询 | 全文检索、JSON 字段搜索、数组包含查询、地理位置查询 |
| BRIN 索引 | 一种轻量级索引,按数据在磁盘上的物理块范围建索引,占用空间极小 | 超大表 + 数据天然有序(如时间序列日志),查范围不查单条 |
| 表分区 | 把一张大表从逻辑上拆成多个小表(分区),查询时只扫相关分区,大幅提升性能和管理效率 | 日志表、订单表等随时间增长的超大表,尤其是需要按时间淘汰旧数据 |
| 表继承 | 让一张表从另一张表继承字段,子表可以加自己的字段,查询父表时能查到所有子表数据 | 数据归档、冷热分层(历史数据放子表)、ORM 的多态继承映射 |
| 插件机制 | PostgreSQL 允许你装各种扩展包来增加功能,比如 postgis(地理信息)、pgvector(向量搜索) | 当标准功能不够用,需要 GIS、向量检索、定时任务、审计等能力时 |
| 权限系统 | 控制谁能查、谁能改、谁能建表,精确到字段级别 | 多租户、数据安全合规、不同角色分权管理时 |
| FDW(外部表) | 在 PostgreSQL 里直接查询另一个数据库(MySQL、Oracle、甚至 CSV 文件)的数据,就像查本地表一样 | 数据迁移、跨库数据整合、临时拉取外部数据做报表 |
| JSON / JSONB | PostgreSQL 原生支持 JSON 数据类型和丰富的 JSON 操作函数,JSONB 是二进制格式,更快且支持索引 | 存半结构化数据(日志、配置、爬虫结果)、灵活 schema、NoSQL 与关系型混合使用 |
| VACUUM | 清理旧版本数据、回收磁盘空间、更新统计信息,是保持 PostgreSQL 性能的「保洁工」 | 频繁更新/删除的表性能下降、磁盘空间不释放、查询计划变差时 |
| 复制(流复制 / 逻辑复制) | 把一台数据库的数据实时同步到另一台或多台,流复制用于高可用,逻辑复制可以按表按行选择性地同步 | 读写分离、异地灾备、跨版本升级、大数据平台实时入仓 |
数据库的额外知识
数据库的分类
| 分类 | 数据模型 | 特点 | 代表作 |
|---|---|---|---|
| 关系型数据库 | 表(行+列),SQL 操作 | 严格 Schema、强 ACID、支持 JOIN | PostgreSQL、MySQL、Oracle、SQL Server |
| 文档型数据库 | JSON/BSON 文档 | Schema-less、易扩展、适合半结构化数据 | MongoDB、CouchDB、Firebase Firestore |
| 键值型数据库 | Key-Value 对 | 超高读写性能、无查询语言、操作简单 | Redis、DynamoDB、LevelDB、Riak |
| 列族型数据库 | 列族,稀疏矩阵存储 | 适合海量写入、列可扩展、压缩率高 | HBase、Cassandra、Bigtable |
| 图数据库 | 节点+边,图结构 | 擅长深度关联查询、最短路径/推荐 | Neo4j、ArangoDB、TigerGraph |
补充说明:键值型、列族型、图数据库统称为 NoSQL;文档型也常归入 NoSQL 阵营。关系型数据库则统称为 SQL 数据库。
数据库设计三范式
| 范式 | 核心要求 | 通俗理解 | 反例 |
|---|---|---|---|
| 第一范式(1NF) | 列不可再分,每列都是原子值 | 一个格子只存一个值,不存数组或复合数据 | 一行里存多个联系电话(138xxx, 139xxx) |
| 第二范式(2NF) | 满足1NF + 非主键列完全依赖于主键(消除部分依赖) | 复合主键时,每一列都要依赖整个主键,不能只依赖其中一部分 | 订单明细表主键是(订单ID, 商品ID),但商品名称只依赖商品ID |
| 第三范式(3NF) | 满足2NF + 非主键列之间不能有传递依赖 | 非主键列不能依赖于另一个非主键列 | 学生表有院系ID和院系名称,后者依赖于前者,应拆分出院系表 |
