Skip to content

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)关注监控指标、容量规划、故障排查决策树与切换演练(第十一、十五、十六章)
架构师关注隔离级别语义、高可用一致性边界、扩展与升级策略(第十、十一、十四、十七章)

四、阅读路线 ​

五、完整目录 ​

知识库按十八章组织,前四章建立基础,第五章起进入机制、应用与运维专题。一级章节使用中文编号,章内条目使用不带前导零的阿拉伯数字。

已交付 ​

规划中(🚧) ​

  • 全部一级目录已交付;后续将按 PostgreSQL 新版本 Release Notes 增量维护与细化。

六、示例库 ​

全库统一使用电商示例数据库 demo_shop,与 MySQL 知识库保持同构的业务模型,便于跨库对照,同时采用 PostgreSQL 惯用语法(bigserial、timestamptz、text、jsonb)。

1、实体关系 ​

2、建库建表脚本 ​

sql
-- 适用版本: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、初始化数据 ​

sql
\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 等在不同版本、参数、数据量下会不同,正文中会标注需实测确认之处。

七、内容更新规则 ​

  1. 版本纪律:行为随版本变化时分别标注适用版本与差异,不写成无条件真理。
  2. 可复现:SQL 示例尽量含准备、执行、验证、清理,并注明执行身份与连接位置。
  3. 不臆造:无法确认的特性/参数/视图标注“待核验”,给出验证方法,绝不伪造出处。
  4. 风险显式化:破坏性语句前加 > [!WARNING];版本差异前加 > [!NOTE]。
  5. 命名统一:SQL 关键字大写,库表字段用小写下划线命名;术语与示例模型全库一致。
  6. 交叉引用完整:新增章节需回填相关文章的“相关主题”,避免断链。

八、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 知识源。

ICP 备案号待补充 · Gitee 主页