planetscale/lead

一、一句话定位


Lead 是一个故意“非生产级”的 Postgres 全文搜索扩展,专为开发、测试、CI 和预发布环境设计,用于精确模拟 TIN 兼容的应用程序 SQL 行为,优先保证正确性与实现简洁,而非查询性能。

二、核心技术/架构亮点


1. 零索引数据:索引仅触发全堆页面扫描,不存储任何搜索信息,所有匹配依赖 Postgres 的 MVCC 可见性重检。
2. 精确结果:每次索引扫描返回所有堆页候选,Postgres 对每个可见元组重新执行 `==>` 操作符和表达式/部分索引重检,确保结果与 TIN 完全一致。
3. 评分重扫:评分函数(`tin.score` 等)在可见元组上重新扫描并重新分词,不依赖预计算。
4. 无共享内存与外部文件:不分配扩展共享内存,不创建额外文件,依赖 Postgres 标准关系存储,重启不丢失索引状态。
5. 轻量构建:基于 `cargo-pgrx` 开发,一行命令即可构建或运行交互式数据库,无需修改预加载配置。

三、适用场景与目标用户


- 场景:开发/测试环境中需要验证 TINQL 查询逻辑的正确性;CI/CD 中的回归测试;预发布环境的安全验证。
- 用户:使用 PlanetScale TIN 全文搜索的应用开发者,需要在不影响生产性能的前提下调试索引行为;Postgres 扩展开发者学习“正确性优先”的设计模式。

四、可动手动作


1. 克隆并构建:
```bash
git clone https://github.com/planetscale/lead.git
cd lead
cargo pgrx package --package tin --no-default-features --features pg18
```
2. 运行开发数据库:
```bash
cargo pgrx run pg18 --package tin
```
SQL 中执行 `CREATE EXTENSION tin` 即可加载 Lead。
3. 运行测试:
```bash
cargo pgrx test pg18 --package tin --no-default-features --features pg18
```
4. 借鉴思路:如果你需要为其他索引类型构建“行为模拟扩展”,可参考 Lead 的全页扫描+MVCC 重检设计,以及用 Rust/PGRX 轻量封装 SQL 操作符的方法。

五、学习优先级


P1(排期)
理由:Lead 的设计理念(正确性优先、零存储索引)对理解 Postgres 索引与 MVCC 交互有启发,但因其非生产定位,不急需上手,可作为扩展开发或测试策略的参考任务排期学习。
赣ICP备2026023170号-1
⌂