PostgreSQL 数据库设计规范:范式、类型选择与迁移演进
好的 schema 设计决定一个系统未来十年好维护还是天天改表。本文系统讲解 PostgreSQL 表设计规范:主键策略(序列/UUID/snowflake)、字段命名与类型选择(数值/时间/JSONB/text)、范式与反范式权衡、外键与约束、索引与唯一性、时间戳与软删除、分表与分区,以及基于迁移工具(Alembic/Prisma)的 schema 演进流程。
category
好的 schema 设计决定一个系统未来十年好维护还是天天改表。本文系统讲解 PostgreSQL 表设计规范:主键策略(序列/UUID/snowflake)、字段命名与类型选择(数值/时间/JSONB/text)、范式与反范式权衡、外键与约束、索引与唯一性、时间戳与软删除、分表与分区,以及基于迁移工具(Alembic/Prisma)的 schema 演进流程。
备份是数据库运维的第一要务。本文系统讲解 PostgreSQL 备份与恢复:pg_dump 逻辑备份与 pg_restore、pg_basebackup 物理备份、WAL 连续归档与 PITR 时间点恢复、备份策略矩阵(RPO/RTO 权衡)、恢复演练清单,以及常见故障场景(误删/误改/坏盘)的实战恢复流程。
PostgreSQL 内置全文检索能力,无需引入 Elasticsearch 即可支撑中小规模的搜索。本文系统讲解 tsvector 文档向量与 tsquery 查询语法、to_tsvector/to_tsquery 分词与词典、@@ 匹配操作符、GIN 索引加速、rank 排序、高亮与中文分词(zhparser/jieba),以及全文搜索与业务搜索的工程架构。
PL/pgSQL 是 PostgreSQL 内置的过程语言。本文系统讲解 CREATE FUNCTION/PROCEDURE 语法、变量与控制流、异常处理、事务控制(COMMIT/ROLLBACK)、触发器(BEFORE/AFTER/INSTEAD OF、行级/语句级)、触发器常见陷阱、以及避免「过程化陷阱」的性能最佳实践与缓存计划问题。
系统化讲解数据库安全加固与审计:账号与权限最小化、TDE 透明加密与传输加密、数据脱敏与动态脱敏、SQL 防火墙、审计日志、以及等保/合规视角下的数据库安全基线。
系统化讲解数据库容量规划与资源治理:容量评估指标与测算方法、水位预警、存储/连接数/CPU 等资源监控、配额与治理、垂直与水平扩展路径、以及一份年度容量规划的实践框架。
系统讲解数据库字符集与排序规则:utf8 vs utf8mb4 的区别、utf8mb4_general_ci 与 utf8mb4_0900_ai_ci 等排序规则选择、emoji/四字节字符存储、乱码的产生链路与排查、连接层字符集陷阱。
梳理数据库迁移的完整工程方法论:同构与异构迁移、迁移方案选型、binlog/CDC 增量同步、双写切换策略、全量数据校验、灰度发布与快速回滚,以及一份可落地的迁移检查清单。
深度讲解数据库分区表的设计与实战:Range/List/Hash/Key 四种分区方式、分区裁剪与分区选择、索引与分区关系、在线分区维护、冷热数据归档,以及与分库分表的取舍。
系统性方法论与实战案例:慢查询日志定位、EXPLAIN 执行计划深度解读、12 类索引失效场景、统计信息与直方图,以及一整套从发现到落地验证的慢 SQL 调优闭环。
构建完整的 PostgreSQL 监控与诊断体系:pg_stat_database 与 pg_stat_activity 关键指标解读、慢查询日志与 log_min_duration_statement、auto_explain 自动执行计划、pg_stat_statements 语句级统计、Prometheus + postgres_exporter + Grafana 仪表盘搭建、核心告警规则(连接数/复制延迟/死元组)、诊断常用 SQL 与常见问题定位方法论。
深入讲解 PostgreSQL JSONB 在文档工作负载下的性能实践:JSONB 二进制存储格式与 TOAST、GIN 倒排索引(jsonb_ops/jsonb_path_ops)与表达式索引、@> 包含与路径操作符查询优化、JSONB 与关系型建模的权衡、函数与操作符性能差异、大 JSON 文档的坑、与 MySQL JSON/MongoDB 的对比,以及真实调优案例。
系统讲解 PostgreSQL 逻辑复制与变更数据捕获(CDC):逻辑复制原理与 WAL 解码(pgoutput/wal2json/decoderbufs)、发布订阅(CREATE PUBLICATION/SUBSCRIBE)配置、逻辑复制做故障切换与零停机迁移、初始同步机制、DDL 限制与数据冲突处理、与 Debezium/Kafka 的数据流集成、复制延迟监控与性能优化。
深入解析 PostgreSQL 事务体系:MVCC 快照与可见性规则、四种隔离级别(读已提交/可重复读/可串行化/SSI)的差异与异常、行锁与表锁的兼容矩阵、pg_locks 锁等待分析、死锁检测机制与避免策略、快照陈旧与长事务(idle in transaction)、事务重试与幂等设计、锁监控常用 SQL。
系统讲解 PostgreSQL 的 VACUUM 机制与表膨胀治理:MVCC 多版本并发控制如何产生死元组、VACUUM 与 AUTOVACUUM 的工作原理与触发条件、autovacuum 参数调优、表膨胀与索引膨胀诊断(pgstattuple/n_dead_tup)、手动 VACUUM FULL 与 CLUSTER、高频 UPDATE 场景的防膨胀设计,以及死元组监控与告警体系。
深入解析 PostgreSQL 全家族索引:B-tree 平衡树原理与索引高度、组合索引列顺序与最左前缀、跳跃扫描的真相、GiST 空间与范围检索、GIN 倒排索引(全文搜索/JSONB/数组)、BRIN 块范围索引、部分索引与表达式索引、覆盖索引 INCLUDE、索引膨胀诊断与并发重建。每个索引类型配真实 DDL、EXPLAIN 示例与选型决策表。
数据库挂了,业务就挂了——高可用(HA)的目标是把"数据库不可用"的概率压到最低,并在不可避免的故障发生时自动、快速、无感知地完成切换。但高可用不是"买几台机器做主从"这么简单:主从复制只是基础,真正难的是故障检测(怎么判断主库真挂了)、自动切换(谁能成为新主 …
对千万级、亿级大表执行 ALTER TABLE 是最让 DBA 与后端工程师胆战心惊的操作之一:一个看似简单的加列、加索引,可能把业务写流量堵死几分钟,甚至引发锁等待风暴。问题的根源在于表结构变更需要在短时间内独占表锁、重写整张表。为此,数据库演进出了在线 DDL 机制(MySQL 的 InnoDB …
分库分表是单机数据库容量触顶后的必经之路,但"怎么分"只是开始——真正复杂的是分完之后:请求怎么路由到正确的库表、SQL 怎么写才能分片、跨分片查询怎么聚合、数据迁移与扩容怎么做。如果这些问题全部靠业务代码硬扛,系统会快速腐烂。分库分表中间件 …
“主从复制是自动的,所以主从数据一定一致”——这是运维里最大的错觉之一。binlog 丢失、复制中断、人为误操作、半同步降级、甚至程序 BUG,都会让从库与主库悄然分道扬镳。更隐蔽的是:复制通常不会报错,不一致像蛀虫一样潜伏,直到某个深夜的查询突然返回错误数据。数据一致性校验 …