zovo.imzovo.im
首页›开源项目›正文

DuckDB 2.0 LTS 发布:能当服务端用,新增触发器和异步 I/O,旧版读不了新格式文件

zovo2026-10-22约 3 分钟读完
DuckDB 团队 10 月 21 日发布 2.0.0 LTS,官方称这是迄今最大的功能版本。它从“嵌在程序里的数据库”往前走了一步,可以用 Quack 协议当服务端;同时加入触发器、更快的对象存储读取,以及给编码 Agent 用的 CLI 模式。升级要先看一个兼容性提醒。

01升级前先看这条

按发布公告,2.0 之前的 DuckDB 读不了 2.0 创建的数据库文件;2.0 仍能读写已有的旧文件,这些旧文件旧版本也照样能读。官方建议先在影子环境测试,关键业务可以等 11 月的首个补丁版本。Go、R、Java 等客户端和部分扩展可能还要几天才跟上,CLI 和 Python 已可用。

版本线支持期限(官方)
2.0(LTS)至少到 2027 年 10 月
1.5延长到 2027 年 3 月,实际也成为 LTS
1.4(上一个 LTS)到 2026 年 11 月下旬

02主要新东西

  • Quack 与 CONNECT:DuckDB 进程可以用 quack 扩展对外提供服务,客户端用新的 CONNECT 语句连上远程库。服务端默认只监听本机,要让别的机器访问,官方建议放在带 TLS 的反向代理后面,直接暴露的选项只用于测试。CONNECT 还能指向 PostgreSQL、MySQL 等支持的远程库,并把查询下推给对方执行。
  • 异步 I/O:读取 Parquet、CSV 和 DuckDB 自家存储格式时,读盘和读网络在后台并行发起,官方称 s3:// 这类对象存储上的查询会快很多(官方另有专门的博客,本站未复测)。
  • VARIANT 类型:存放结构不固定的半结构化数据,不是文本格式,官方称能保持列式执行的性能,Parquet 读写也已支持。
  • 触发器:支持 CREATE TRIGGER,含 BEFORE/AFTER、逐行或逐语句、REFERENCING 转换表;常见用途是审计表,也能用来增量维护物化视图。部分组合暂不支持,详见官方限制说明。
  • Agent 模式:CLI 检测到由 Claude Code、Codex、Cursor 之类的 Agent 调用时,输出精简的 Markdown 表格,说明结果是否被截断,错误以 JSON 返回。官方在 TPC-H 实验里称模型需要读的输出减少 59%;可用 -agent 或 -no-agent 手动开关。
  • 新 SQL 解析器:基于 PEG 的解析器成为默认,设计上兼容旧版,出问题可用 SET enable_legacy_parser = true 切回。
  • 其他:NEAREST 连接(向量相似检索)、JSON 修改函数、`$变量` 简写、嵌套 schema;自带的 ICU 库被官方自己实现的时区和排序规则取代。

03会影响老代码的地方

  • 旧的单箭头 lambda(x -> x + 1)默认关闭,要改写成 lambda x: x + 1;也可临时用 SET lambda_syntax = 'enable_single_arrow' 打开,但 2.1 会彻底移除。
  • 源码需要 C++17 编译器。
  • amalgamation 单文件构建被标记为弃用。
  • macOS x86_64 逐步退出支持:社区扩展已不再为它构建,2.1 起不再支持。

试用的话,按官方安装页装好后,在两个终端里分别运行 duckdb -serve 和 duckdb -connect 就能体验 Quack 的客户端-服务端(官方示例,本站未实际运行)。DuckDB 本体为开源项目,具体许可证见其 GitHub 仓库。

标签:
本文由 zovo 编辑撰写,转载请注明出处。

相关文章