本章要回答的三个问题:DuckDB 内核装进进程的只是几十兆的二进制,S3 上的远端文件、地理数据、全文检索这些"内核没有"的能力从哪来?如果内置函数库满足不了业务,自己动手补一块的门槛到底有多高?当一个进程什么都能读——本地文件、远端对象、不可信的 CSV——信任边界又该画在哪里?
第5章收尾时工具箱已经配齐:接口、方言、生态、工作流,全部就位。但配齐的只是"管道",管道里能流什么,取决于引擎认不认得那些数据形态。直查 Parquet 是内核自带的,可直查 S3 要靠网络栈,读地理边界要靠空间函数,中文分词检索要靠另一套索引——这些能力如果全部静态编译进内核,二进制会膨胀成怪物,绝大多数用户永远用不上的代码也要一起背。扩展机制是 DuckDB 给出的答案:内核保持精瘦,能力按需装载。这和第2章讲过的"嵌入即主权"一脉相承——能力外延也长在你的进程里,不依赖外部服务。
而外延越大,边界越重要。嵌入式架构把数据库和你的 Python 进程绑在一起,数据库能读的文件,你的进程就等于都能读;反过来,一份来路不明的 CSV 被引擎解析时,引擎也在替你承担解析器的风险。传统服务端数据库有一整套账号与权限体系替你画线,嵌入式架构把画线的笔交还给了使用者本人。能力外延与安全边界放在同一章讲,正是因为它们是同一枚硬币的两面。
读完本章,你应当能做四件事。第一,说清扩展系统的装载模型——哪些能力出厂自带、哪些要显式安装加载、安装产物放在哪、离线环境怎么处理——并在需要远端文件、空间数据、全文检索时第一时间找到对的扩展。第二,走通自定义能力的入门路径:Python 侧注册自定义函数只需一行装饰器,SQL 侧用宏复用表达式,C++ 侧的完整扩展开发则知道从模板起步到签名校验的全流程。第三,为自己驾驭的嵌入式实例画出信任边界:外部访问开关、配置锁定、只读打开三样工具各管哪段,敏感数据留在本地的优势怎么用足。第四,把"读不可信文件"从一句抽象的警告,落成几条具体的操作约束。
地图中间是内核,右上是扩展机制这个"能力货架":装载是两步的(先安装到本地、再加载进会话),货架上的每件能力都对应一类真实需求。下半部分是安全侧的三样工具,它们共同把"进程即边界"这句原则落成可操作的开关。本章三节按"先货架、再造货架、后画边界"推进。
| 节号 | 回答哪个问题 | 关键产出 |
|---|---|---|
| 6.1 扩展系统与常用扩展 | 内核没有的能力从哪来 | 装载模型与常用扩展速查 |
| 6.2 自定义扩展开发 | 自己补能力门槛多高 | 三级阶梯:函数、宏、原生扩展 |
| 6.3 安全与权限 | 信任边界画在哪 | 边界三开关与不可信文件约束 |
需要第3.4节直查外部文件的体感,以及第5.1节的 Python 接口基础。扩展安装涉及网络下载,离线环境的应对方式在6.1节有专门交代;C++ 扩展开发一节不要求内核源码阅读经验,讲到哪层算哪层。
本章不引入新的主线案例任务——它更像一次装备检查:把你可能用到的能力盘一遍,把必须守住的边界画清楚。所以读法可以放松一些:6.1 和 6.3 适合通读,6.2 适合按需查阅,等你真的要写自定义函数那天再回来细看也不迟。反过来,6.3 的三个边界开关建议现在就抄进自己的代码模板——安全习惯的养成靠的是第一次就把开关写对,而不是出事后再补。
能力外延与边界意识到位后,全书的"what 与 why"就讲完了。第7章是收官:把散落各章的调优手段收拢成一份可执行清单,把表设计的取舍摆上桌面,把常见报错翻译成人话,最后回到主线案例做一次完整复盘——那份 CSV 交易明细,将在收官节拿到它应得的结论。