Featured image of post DuckDB 1.5.4 发布:稳定性增强与 v2.0.0 前瞻

DuckDB 1.5.4 发布:稳定性增强与 v2.0.0 前瞻

DuckDB 1.5.4 Variegata 修复了多项关键 Bug 和崩溃问题,同时团队预告了 v2.0.0 将于今年秋季发布。本文深入分析本次更新的技术细节和未来路线图。

引言

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-172026-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 版本修复了多个可能导致崩溃的问题:

问题编号描述影响
#21854Arrow GeoArrow CRS 序列化中的双重释放和内存泄漏GIS 扩展崩溃
#22836SQL 管道输出时的进度条崩溃CLI 使用崩溃
#23174未设置存储路径时的崩溃配置错误导致崩溃
#23232gzip 压缩写入溢出Parquet 写入崩溃
# Python 中使用 DuckDB 的稳健性测试示例
import duckdb

# 修复后,以下操作不再崩溃
con = duckdb.connect(':memory:')
con.execute("INSTALL parquet; LOAD parquet;")

# 处理大型 Parquet 文件
result = con.execute("""
    SELECT 
        COUNT(*) as total_rows,
        SUM(amount) as total_amount
    FROM read_parquet('large_data/*.parquet')
""").fetchdf()

print(result)

4. 性能优化

1.5.4 版本包含了几项重要的性能改进:

-- 修复:原生几何 Parquet 统计信息剪枝
-- 现在可以更有效地跳过不需要的 Parquet 行组
SELECT * FROM read_parquet('geo_data.parquet')
WHERE ST_Intersects(geometry, ST_Polygon(...));

-- 新增:OPERATOR_ROW_GROUPS_SCANNED 统计信息
-- 帮助诊断 Parquet 读取性能
SHOW ALL SETTINGS LIKE 'operator_row_groups_scanned';

对于 jemalloc 构建版本,系统堆内存修剪也得到了优化:

# 内存使用对比(jemalloc 构建)
import duckdb
import tracemalloc

tracemalloc.start()

# 执行大量 Parquet 读取
con = duckdb.connect("benchmark.duckdb")
con.execute("CREATE TABLE big_data AS SELECT * FROM read_parquet('data/*.parquet');")

current, peak = tracemalloc.get_traced_memory()
print(f"当前内存: {current / 1024 / 1024:.2f} MB")
print(f"峰值内存: {peak / 1024 / 1024:.2f} MB")

tracemalloc.stop()

5. 其他重要改进

CLI 暗色模式支持:1.5.4 新增了 -dark-mode-light-mode 命令行选项,改善了终端体验:

# 显式指定暗色模式
duckdb -dark-mode

# 显式指定亮色模式
duckdb -light-mode

# 自动检测终端背景颜色(已改进)
duckdb

ATTACH 选项增强:新增实验性的 vacuum_rebuild_indexes 选项:

-- 附加数据库时重建索引
ATTACH 'other.db' AS other_db (vacuum_rebuild_indexes);

安全加固:对多个 DuckDB/Parquet 解压缩和反序列化路径进行了加固,增强了安全性。

从 1.5.4 到 v2.0.0:路线图展望

在公告的最后,DuckDB 团队透露了一个激动人心的消息:v2.0.0 将于今年秋季发布。虽然具体的功能列表尚未公布,但根据 v1.5.x 系列的发展趋势,我们可以推测 v2.0.0 可能包含以下内容:

可能的 v2.0.0 新特性

  1. 增强的流处理能力:延续 v1.5.x 的流窗口函数,v2.0.0 可能会提供更完整的流数据处理框架。

  2. 更强大的地理空间支持:修复 GeoArrow CRS 序列化等问题的同时,可能会引入更全面的 GIS 功能。

  3. 改进的并发事务:基于 v1.5.x 的 OLTP 优化,v2.0.0 可能会提供更完善的 ACID 事务支持。

  4. 扩展生态系统:随着 ExtensionKit 和 C# 扩展的推出,v2.0.0 可能会进一步丰富扩展生态。

  5. 性能里程碑:v2.0.0 可能会在 TPC-DS 等基准测试中刷新记录。

与传统工具的对比

维度DuckDB 1.5.4PostgreSQLPandasApache Spark
安装复杂度⭐ 零依赖⭐⭐ 需配置⭐⭐ 需 pip⭐⭐⭐⭐ 集群部署
查询速度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
内存效率⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
SQL 兼容性⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
扩展生态⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
学习曲线⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

升级建议

生产环境升级策略

# 1. 检查当前版本
duckdb --version

# 2. 备份现有数据库
cp production.duckdb production_backup_$(date +%Y%m%d).duckdb

# 3. 升级 DuckDB CLI
curl -L https://github.com/duckdb/duckdb/releases/download/v1.5.4/duckdb_cli-linux-amd64.zip -o duckdb.zip
unzip -o duckdb.zip
sudo mv duckdb /usr/local/bin/

# 4. 验证升级
duckdb --version
duckdb -c "SELECT version();"

Python 环境升级

# pip 升级
pip install --upgrade duckdb

# 或使用 uv
uv pip install --upgrade duckdb

# 验证
import duckdb
print(duckdb.__version__)  # 应显示 1.5.4

变现建议

对于企业用户,升级到 1.5.4 可以带来以下直接收益:

  1. 减少生产事故:修复的崩溃问题可以直接降低运维成本。每个因崩溃导致的停机事件可能花费数千美元,而升级的成本几乎为零。

  2. 提升分析效率:性能优化意味着同样的硬件可以处理更多数据,节省云基础设施费用。

  3. 为 v2.0.0 做准备:提前升级到 1.5.4 可以为秋季的 v2.0.0 迁移做好准备,避免集中升级的风险。

  4. 数据安全:安全加固修复了潜在的漏洞,保护企业数据资产。

  5. 开发者体验:CLI 暗色模式和更好的错误消息提高了开发效率,间接降低了人力成本。

结语

DuckDB 1.5.4 (Variegata) 虽然是一个补丁版本,但它修复了众多关键问题,显著提升了稳定性和安全性。配合即将推出的 v2.0.0,DuckDB 正在成为数据分析领域越来越有力的竞争者。

同时,DuckCon #7 也将在阿姆斯特丹举行,这是了解 DuckDB 最新动态和社区交流的好机会。无论是线上观看还是现场参与,都不容错过。

提示:v2.0.0 即将到来,建议密切关注 DuckDB 官方博客和 GitHub 仓库,以便第一时间获取更新信息和迁移指南。

📺 Watch video tutorials → Olap Studio YouTube

Subscribe for more DuckDB & AI automation tutorials

使用 Hugo 构建
主题 StackJimmy 设计

⚠️ 本站为独立社区项目,与 DuckDB 基金会及 DuckDB 官方项目无任何从属、背书或赞助关系。

"DuckDB" 是 DuckDB 基金会的注册商标,本站仅以事实描述方式使用该名称。

本站内容仅供教育与社区推广用途,不构成任何商业服务。