PostgreSQL 中文知识库
本页承担 README 职责:介绍知识库定位、版本基线、目标读者、阅读路线、完整目录、示例库、更新规则与 RAG 使用建议。
一、知识库简介
这是一套面向生产环境的系统化 PostgreSQL 中文知识库,从概览与版本、安装配置、进程与内存、存储与元组入门,逐步覆盖 MVCC(Multi-Version Concurrency Control,多版本并发控制)与 Vacuum、WAL(Write-Ahead Logging,预写日志)与恢复、索引、执行计划、事务与锁、复制与高可用、备份恢复、扩展生态以及故障排查。它既可用于系统学习,也可作为日常运维查询手册,并可作为 AI 检索增强生成(Retrieval-Augmented Generation,RAG)的高质量知识源。
内容组织遵循“一个首页 + 一个术语表 + 多个主题目录”的形式,每个主题目录含一个导览页与若干可独立阅读的文章,天然适配按章节切分后的检索。每篇文章按“概念 → 原理 → 操作 → 验证 → 风险 → 排障 → 延伸”组织。
二、版本基线与纪律
- 以 PostgreSQL 16 为默认讲解基线,覆盖 PostgreSQL 12–18 的关键差异,并在版本敏感处标注“适用版本”。
- 不提供无版本上下文的默认参数值。PostgreSQL 的默认值可能随大版本、操作系统、编译选项和发行版而不同;正文一律要求用
SHOW <name>;或查询pg_settings实测确认。 - 明确区分 PostgreSQL 内置能力、操作系统能力 与 第三方扩展/工具能力;第三方扩展不默认视为内置特性。
- 不混淆 PostgreSQL 与 MySQL、Oracle、SQL Server 的机制;涉及对比时明确差异来源与版本。
NOTE
本环境未提供可连接的 PostgreSQL 实例与联网检索工具,示例输出均标注“示例输出”,其具体数值需按目标版本实测;版本敏感结论列入各文末“版本差异”与全库“待核验清单”,并附官方文档来源。
三、目标读者
| 读者 | 使用方式 |
|---|---|
| 应用开发者 | 速查 SQL、数据类型、索引、执行计划与事务(第七、八、九、十章) |
| 数据库管理员(Database Administrator,DBA) | 掌握 MVCC/Vacuum、WAL/恢复、备份、复制、监控与应急(第五、六、十一、十二、十五、十六章) |
| 站点可靠性工程师(Site Reliability Engineer,SRE) | 关注监控指标、容量规划、故障排查决策树与切换演练(第十一、十五、十六章) |
| 架构师 | 关注隔离级别语义、高可用一致性边界、扩展与升级策略(第十、十一、十四、十七章) |
四、阅读路线
- 基础入门:一、概览与版本 → 二、安装与配置 → 三、架构与进程 → 四、存储与元组
- 开发者速查:七、SQL 与类型 → 八、索引 → 九、执行计划 → 十、事务与锁
- DBA 核心:五、MVCC → 六、WAL → 十二、备份恢复 → 十一、复制与高可用 → 十六、应急手册
- SRE 排障:十六、应急手册 → 九、执行计划 → 十五、监控
五、完整目录
知识库按十八章组织,前四章建立基础,第五章起进入机制、应用与运维专题。一级章节使用中文编号,章内条目使用不带前导零的阿拉伯数字。
已交付
一、PostgreSQL 概览与版本
二、安装、部署与配置
三、架构与进程
四、存储、页与元组
五、MVCC、Vacuum 与膨胀
六、WAL、检查点与恢复
七、SQL、数据类型与对象
八、索引原理与设计
九、优化器与执行计划
十、事务、锁与并发
十一、复制与高可用
十二、备份、恢复与容灾
十三、安全、权限与审计
十四、扩展、FDW 与生态
十五、监控、调优与容量规划
十六、故障排查与应急手册
十七、升级、迁移与兼容性
十八、实验、案例与术语扩展
规划中(🚧)
- 全部一级目录已交付;后续将按 PostgreSQL 新版本 Release Notes 增量维护与细化。
六、示例库
全库统一使用电商示例数据库 demo_shop,与 MySQL 知识库保持同构的业务模型,便于跨库对照,同时采用 PostgreSQL 惯用语法(bigserial、timestamptz、text、jsonb)。
1、实体关系
2、建库建表脚本
-- 适用版本:PostgreSQL 12+(timestamptz、jsonb、生成列等均可用;生成列需 12+)
-- 执行身份:具备建库权限的角色;连接位置:psql
-- 说明:以下为示例 DDL,占位数据均为虚构值
CREATE DATABASE demo_shop ENCODING 'UTF8';
\connect demo_shop
-- 用户表
CREATE TABLE users (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
username text NOT NULL,
email text NOT NULL,
status smallint NOT NULL DEFAULT 1, -- 1 正常, 0 禁用
created_at timestamptz NOT NULL DEFAULT now(),
CONSTRAINT uk_users_username UNIQUE (username),
CONSTRAINT uk_users_email UNIQUE (email)
);
-- 商品分类表
CREATE TABLE categories (
id int GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name text NOT NULL,
parent_id int NOT NULL DEFAULT 0 -- 0 表示顶级分类
);
-- 商品表
CREATE TABLE products (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
category_id int NOT NULL,
name text NOT NULL,
price numeric(10,2) NOT NULL,
stock int NOT NULL DEFAULT 0,
attributes jsonb NOT NULL DEFAULT '{}'::jsonb,
created_at timestamptz NOT NULL DEFAULT now()
);
CREATE INDEX idx_products_category ON products (category_id);
CREATE INDEX idx_products_price ON products (price);
-- 订单表
CREATE TABLE orders (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
user_id bigint NOT NULL,
total_amount numeric(12,2) NOT NULL DEFAULT 0,
status smallint NOT NULL DEFAULT 0, -- 0 待支付, 1 已支付, 2 已取消
created_at timestamptz NOT NULL DEFAULT now()
);
CREATE INDEX idx_orders_user ON orders (user_id);
CREATE INDEX idx_orders_status_created ON orders (status, created_at);
-- 订单明细表
CREATE TABLE order_items (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
order_id bigint NOT NULL,
product_id bigint NOT NULL,
quantity int NOT NULL,
unit_price numeric(10,2) NOT NULL
);
CREATE INDEX idx_order_items_order ON order_items (order_id);
CREATE INDEX idx_order_items_product ON order_items (product_id);3、初始化数据
\connect demo_shop
INSERT INTO users (username, email, status) VALUES
('alice', 'alice@example.com', 1),
('bob', 'bob@example.com', 1),
('carol', 'carol@example.com', 0);
INSERT INTO categories (name, parent_id) VALUES
('电子产品', 0),
('手机', 1),
('图书', 0);
INSERT INTO products (category_id, name, price, stock) VALUES
(2, '示例手机 A', 2999.00, 100),
(2, '示例手机 B', 4999.00, 50),
(3, '示例图书 C', 59.90, 200);
INSERT INTO orders (user_id, total_amount, status) VALUES
(1, 2999.00, 1),
(2, 59.90, 0);
INSERT INTO order_items (order_id, product_id, quantity, unit_price) VALUES
(1, 1, 1, 2999.00),
(2, 3, 1, 59.90);说明:以上账号、邮箱均为虚构示例值,不含真实凭证。示例结果、执行计划、
ctid/事务 ID 等在不同版本、参数、数据量下会不同,正文中会标注需实测确认之处。
七、内容更新规则
- 版本纪律:行为随版本变化时分别标注适用版本与差异,不写成无条件真理。
- 可复现:SQL 示例尽量含准备、执行、验证、清理,并注明执行身份与连接位置。
- 不臆造:无法确认的特性/参数/视图标注“待核验”,给出验证方法,绝不伪造出处。
- 风险显式化:破坏性语句前加
> [!WARNING];版本差异前加> [!NOTE]。 - 命名统一:SQL 关键字大写,库表字段用小写下划线命名;术语与示例模型全库一致。
- 交叉引用完整:新增章节需回填相关文章的“相关主题”,避免断链。
八、RAG 使用建议
- 按文档切分:每篇文章是自包含知识单元,建议以“文档 + 二级标题”为切分粒度,不拆散 SQL 代码块与结果表。
- 利用 frontmatter:
title / slug / category / tags / postgresql_versions / audience / difficulty / last_verified可作为过滤与召回增强字段。 - 版本过滤:检索时用
postgresql_versions按目标版本过滤,避免召回不适用的版本行为。 - 术语归一:结合术语表做同义词归一(如“死元组 / dead tuple”“临键 / next-key”不适用于 PG,需以 PG 术语为准)。
九、检索关键词
PostgreSQL 知识库、PostgreSQL 教程、MVCC、Vacuum、WAL、检查点、PITR、索引、B-tree、GIN、GiST、BRIN、执行计划、EXPLAIN、事务隔离级别、SSI、流复制、逻辑复制、故障切换、备份恢复、pg_basebackup、pg_stat_statements、故障排查、RAG 知识源。
