Skip to content

范围

Language: English | 简体中文

产品边界

MiniPostgres 是进程内关系数据库内核,而不是网络服务。PostgreSQL 18 是语义和 架构参考,不是兼容性目标。

阶段 A

阶段 A 接受:

CREATE TABLE
INSERT
SELECT
UPDATE
DELETE
EXPLAIN [ANALYZE]

查询子句:

WHERE
INNER JOIN / JOIN
GROUP BY
ORDER BY [ASC|DESC] [NULLS FIRST|LAST]
LIMIT

聚合:

COUNT
SUM
AVG
MIN
MAX

类型:

INT64 (INT, INTEGER, BIGINT syntax)
FLOAT64 (FLOAT syntax)
BOOLEAN
TEXT
NULL

NOT NULLPRIMARY KEYUNIQUE 会被解析为元数据。阶段 A 强制执行 NOT NULL

阶段 B

阶段 B 增加:

CREATE [UNIQUE] INDEX
checksummed fixed pages
stable slotted heap storage
buffer pool and Clock eviction
persistent B+Tree indexes
clean close and restart

冻结的索引子集拒绝 NULL 键。显式唯一 B+Tree 索引在单进程语句锁存器下强制 执行。已接受的单列 PRIMARY KEY 和内联 UNIQUE 声明会创建自动唯一 B+Tree 索引。复合约束仍不在此阶段范围内。

阶段 C

阶段 C 增加:

ANALYZE [table]
durable exact table and column statistics
fixed-point logical rewrites
sequential versus B+Tree index scan costing
nested-loop versus hash join costing
connected inner-join ordering for two through four relations
per-node EXPLAIN ANALYZE instrumentation

代价是相对比较值,而不是毫秒。DML 会刻意让统计信息保持陈旧,直到下一次显式 执行 ANALYZE。五个或更多关系的连接保留源顺序。

阶段 D

阶段 D 增加事务、语句/事务快照、元组版本、写者锁、死锁检测、带校验和的 WAL、尖锐检查点(sharp checkpoint)和 REDO 恢复。

阶段 E

阶段 E 增加显式 VACUUM、清理水位(cleanup horizon)、稳定槽位复用前的 索引清理、不改变 TID 编号的页面压缩、索引键未改变时的同页 HOT 更新,以及 最终验收证据。

非目标

  • PostgreSQL 线协议或磁盘格式兼容;
  • 完整的 PostgreSQL 语法、类型转换、错误、排序规则或系统目录;
  • HAVINGDISTINCTOFFSET、子查询、INBETWEENLIKEOUTER JOIN
  • DEFAULT 值;
  • DROP TABLEDROP INDEXALTER
  • SELECT FOR UPDATE、共享行锁和 PostgreSQL 完整的锁模式族;
  • 用户、权限、外键、视图、触发器、存储过程;
  • 并行查询、多个服务器进程、复制或逻辑解码;
  • 完整的 ARIES/UNDO、TOAST、SSI、XID 回卷/冻结、保存点或生产级自动清理;
  • PostgreSQL 完整的 HOT 链剪枝或兼容的 WAL/检查点格式;
  • 参考仓库内的课程内容。