alitrack

DuckDB 2.0 今天发布,我先跑了触发器和 VARIANT

等了三个月的 DuckDB 2.0.0 LTS 落地了:今天(2026 年 10 月 21 日)官方博客挂出发布公告,代号 Cinnamon Teal,将近 2 万个提交,官方口径是"迄今最大的功能版本"。我第一时间在本地装了 2.0.0 正式版,把最值得关心的几条都跑了一遍——结论:核心特性可用,lambda 语法迁移是升级第一件事,存储格式是唯一硬红线。
DuckDB 2.0 主要新特性一览
DuckDB 2.0 主要新特性一览 ● ● ●

版本线比你想的复杂

2.0 是 LTS,支持到至少 2027 年 10 月。但旧版本没有立即退役:1.4 支持到今年 11 月底,1.5 被延长到明年 3 月,等于也变相 LTS。也就是说明年 3 月前,三条版本线并存。
三条版本线并存,谁先退场
三条版本线并存,谁先退场 对生产环境的建议写在官方迁移指南里:先在影子系统测,任务关键型负载等 11 月的第一个 patch 版本。 ● ● ●

先跑为敬:三条实测

触发器 。CREATE TRIGGER,支持 BEFORE/AFTER、FOR EACH ROW/STATEMENT、REFERENCING OLD/NEW TABLE。我用它实现了一张审计表:更新 target 表一行,audit 表自动记下旧值和新值,实测通过。官方博客还演示了用两个触发器 + MERGE 维护增量物化视图——这是通往完整物化视图的一步。 VARIANT 类型转正 。半结构化数据列式存储,每行可以长得不一样。我插入两条结构完全不同的 JSON,转 VARIANT 存进同一列,variant_type 和 variant_keys 都能正常读出来,还能直接 payload.user.id 点号取值。官方描述是"存 JSON 的性能、列式执行的速度",实测确实顺。 PEG 解析器成为默认 。2018 年首提交以来一直用的 PostgreSQL 衍生 YACC/Bison 解析器退役,自家 PEG 解析器转正。好处:扩展可以直接挂进语法本身,报错带精确位置。实测语法错误确实指到了具体列位置。想切回去:装 legacy_parser 扩展,SET enable_legacy_parser = true。 ● ● ●

升级前必查的三件事

第一, 存储格式单向门槛 :2.0 以前的 DuckDB 读不了 2.0 创建的库文件。反过来没问题——2.0 能读写你的旧库,旧库也还能被老版本读。风险只在"多进程混跑不同版本"的场景,这类部署要格外小心。 第二, lambda 单箭头语法默认禁用 。x -> x + 1 直接报 Binder Error,提示换成 Python 风格 lambda x: x + 1,实测两条都验证了。可以 SET lambda_syntax = 'enable_single_arrow' 临时救急,但 2.1 会彻底移除。老 SQL 脚本里如果有单箭头,升级前先批量替换。 第三, ICU 依赖消失 。时区、日历、排序规则全部改为 icu 扩展原生实现,时区数据从 IANA 数据库直接构建、压缩到约 45KB。依赖 ICU 库的嵌入场景,升级前过一遍文档。 ● ● ●

其余亮点快速过

  • 异步 I/O :Parquet/CSV 读取的 I/O 层与查询处理层解耦,后台发读请求、多个请求并行在飞,对象存储(s3://)上的查询明显受益。
  • Agent 模式 :CLI 检测到被 Claude Code、Codex、Cursor 这类编码代理驱动时自动切换:输出紧凑 Markdown 表、明确标注截断、提前停掉失控查询、错误以 JSON 返回。官方 TPC-H 实验里代理要读的输出量降了 59%。
  • 自托管扩展仓库 :组织可以建自己的扩展仓库、自己签名,安装加载体验和内置扩展一致。语法还在演进,官方标注 work in progress。
  • SQL 方言 :$x 变量简写、数据修改 CTE、NEAREST join(向量检索进 SQL)、嵌套 schema、json_set/json_insert/json_replace/json_remove 四个 JSON 修改函数(实测 json_set('{"a":1}'::JSON, '$.b', '2'::JSON) 返回 {"a":1,"b":2})、FETCH FIRST、UNNEST 进 GROUP BY。
  • 编译要求 :C 11 升到 C 17,官方发布构建默认换 Clang。
  • DuckLake 1.1 同日发布 (我另写了一篇专门讲它)。
● ● ●

回到开头

三个月前 v2.0 预览版发布时我写过一轮预判,今天正式版落地:触发器、VARIANT、新解析器、agent 模式全部兑现,代码我本地都跑通了。这个版本真正要紧的不是新功能清单,而是它定下的两条时间线——旧存储格式的单向门,和 2.1 将彻底移除的 lambda 单箭头。升级这件事,官方把门给你留着,但闸门落下有日期。 你的生产环境会第一时间升 2.0 吗?A. 立刻升,反正旧库能读;B. 等 11 月第一个 patch;C. 混跑多版本,得先理清进程清单。评论区说一声,我看要不要写一篇多进程混跑的完整升级实录。 ● ● ●

参考来源

  1. 01 DuckDB 2.0.0 发布公告(2026-10-21)
https://duckdb.org/2026/10/21/announcing-duckdb-200.html
  1. 01 GitHub v2.0.0 Release(Cyanoptera)
https://github.com/duckdb/duckdb/releases/tag/v2.0.0
  1. 01 DuckDB 安装页
https://duckdb.org/docs/install/
  1. 01 本文全部实测基于本地安装的 duckdb Python 包 2.0.0(pip 安装),测试脚本留存可复现。