引言
2026 年 6 月 17 日,DuckDB 团队同时发布了两个重要版本:DuckDB 1.5.4(Variegata) 和 DuckDB 1.4.5 LTS(Andium)。作为 1.5.x 系列的第五个补丁版本,1.5.4 聚焦于稳定性修复、崩溃预防和性能优化。更重要的是,团队在公告中透露了令人期待的消息——DuckDB v2.0.0 将于今年秋季发布。
本文将深入分析 1.5.4 版本的关键改进,并探讨即将到来的 v2.0.0 可能带来的变化。
版本概览
| 特性 | DuckDB 1.5.4 (Variegata) | DuckDB 1.4.5 LTS (Andium) |
|---|---|---|
| 发布类型 | 常规补丁发布 | LTS 补丁发布 |
| 发布日期 | 2026-06-17 | 2026-06-17 |
| 支持周期 | 至 v2.0.0 | 长期支持 |
| 主要焦点 | 崩溃修复、性能优化 | 稳定性、向后兼容 |
| 适用场景 | 生产环境推荐升级 | 需要长期稳定的用户 |
关键修复与改进
1. 正确性修复:VARIANT 类型的深度优化
DuckDB 的 VARIANT 类型是其处理半结构化数据的核心功能之一。1.5.4 版本修复了多个与 VARIANT 相关的严重 Bug:
-- 修复前:过滤条件下 VARIANT 读取错误行
-- 修复后:确保过滤条件下 VARIANT 正确读取
CREATE TABLE variant_data AS
SELECT * FROM read_json_auto('data.json');
-- 现在这个查询将返回正确的结果
SELECT
variant_col:field1::VARCHAR AS field1,
variant_col:field2::INTEGER AS field2
FROM variant_data
WHERE variant_col:field1 IS NOT NULL;
另一个重要的修复涉及 MERGE INTO 语句中的目标表和源表绑定逻辑:
-- 修复:WHEN NOT MATCHED 现在只考虑目标表
-- WHEN NOT MATCHED BY TARGET 现在只考虑源表
MERGE INTO target_table t
USING source_table s
ON t.id = s.id
WHEN MATCHED THEN UPDATE SET t.value = s.value
WHEN NOT MATCHED THEN INSERT VALUES (s.id, s.value);
2. JSON 处理能力的增强
JSON 函数是 DuckDB 最受欢迎的功能之一。1.5.4 版本修复了多个 JSON 相关的问题:
-- 修复:json_keys 现在正确处理通配符路径
SELECT json_keys('{"a": {"b": 1, "c": 2}}', '$.a.*');
-- 修复:ignore_errors 参数不再静默接受无效 JSON
SELECT * FROM read_json_auto('data.json', ignore_errors => true);
-- 修复:NULL JSON key 现在被正确拒绝
SELECT json_extract('{"key": "value"}', 'null_key');
3. 崩溃预防:生产环境的定心丸
1.5.4 版本修复了多个可能导致崩溃的问题:
| 问题编号 | 描述 | 影响 |
|---|---|---|
| #21854 | Arrow GeoArrow CRS 序列化中的双重释放和内存泄漏 | GIS 扩展崩溃 |
| #22836 | SQL 管道输出时的进度条崩溃 | CLI 使用崩溃 |
| #23174 | 未设置存储路径时的崩溃 | 配置错误导致崩溃 |
| #23232 | gzip 压缩写入溢出 | Parquet 写入崩溃 |
# Python 中使用 DuckDB 的稳健性测试示例
import duckdb
# 修复后,以下操作不再崩溃
con = duckdb.ATTACH (':memory:')
con.execute("INSTALL parquet; LOAD parquet;")
# 处理大型 Parquet 文件
result = con.execute("""
---
## 本文信息
| 项目 | 内容 |
|------|------|
| DuckDB 版本 | v1.5.x(部分功能基于 v2.0 Preview) |
| 最后验证 | 2026-09-12 |
| 测试环境 | Linux / x86_64 / 16GB RAM |
| 官方文档 | [DuckDB Documentation](https://duckdb.org/docs/) |
| GitHub | [pengzz9527/duckdb-blog](https://github.com/pengzz9527/duckdb-blog) |
如发现错误,欢迎通过 [GitHub Issue](https://github.com/pengzz9527/duckdb-blog/issues) 或邮件 [email protected] 反馈。
