## PostgreSQL 中的 CTE:超越可读性 CTE(Common Table Expressions,公共表表达式)是一种流行的 SQL 功能,通常用于查询组织,但其性能影响已经演变。最初,CTE 充当“优化屏障”,强制对结果进行物化——完全计算和存储,阻止查询计划器跨 CTE 进行优化。这意味着失去了使用索引和谓词下推的机会。 PostgreSQL 12 通过 CTE 内联改变了这一点,现在计划器可以将 CTE 视为子查询,应用正常的优化。但是,当存在多次引用、递归查询、数据修改操作或使用 `VOLATILE` 函数时,仍然会发生物化。PostgreSQL 17 通过统计信息传播改进了物化 CTE,提高了规划准确性。PostgreSQL 18 提供了物化期间内存/磁盘使用情况的可视性。 虽然 CTE 提供了可读性,但请注意其行为。对于单次使用、简单的 CTE,内联是理想的。对于具有小结果的多次引用,物化是可以接受的。大型中间结果受益于具有索引和统计信息的临时表。数据修改和递归需要 CTE,但要了解其局限性。 最终,理解 PostgreSQL *如何* 处理 CTE 对于编写高效查询至关重要,超越“先做这个,再做那个”的命令式风格,让计划器有效地进行优化。
2026年3月,Trip Venturella发布了“Mr. Chatterbox”,一个独特的语言模型,仅使用来自英国图书馆的28,000多份维多利亚时代(1837-1899)的公共版权书籍进行训练。该模型拥有3.4亿个参数(类似于GPT-2 Medium),旨在展示在不依赖抓取和未经许可的数据的情况下构建LLM的潜力。
目前,Mr. Chatterbox的回复虽然具有独特的维多利亚风格,但还比较基础——更像一个马尔可夫链,而非一个复杂的LLM。开发者承认需要更多训练数据(估计超过70亿个token)才能实现真正的对话能力。
尽管存在局限性,该项目被认为是在完全公共领域资源的基础上构建LLM的一个有希望的步骤。一个名为“llm-mrchatterbox”的插件允许用户使用LLM框架在本地运行2.05GB的模型,展示了在Claude Code的帮助下,插件创建的成功自动化。你可以在[这里](链接到HuggingFace Spaces demo)试用演示。