Featured image of post DuckDB 1.5.5 发布:安全补丁、性能优化与关键 Bug 修复

DuckDB 1.5.5 发布:安全补丁、性能优化与关键 Bug 修复

DuckDB 1.5.5 正式发布,包含多项安全补丁(CVE 修复)、内存管理改进、Parquet 和 JSON 处理优化。本文全面解析新版本特性。

概述

2026 年 7 月 22 日,DuckDB 团队发布了 DuckDB 1.5.5——这是 1.5 (Variegata) 系列的第六个补丁版本。虽然官方公告简洁地将其描述为"bugfixes and performance improvements",但从 GitHub 的完整变更日志来看,这次更新涵盖了 超过 50 个 PR,涉及安全性、性能、稳定性等多个维度。

DuckDB 1.5.5 架构概览

安全补丁:修复多个越界读取漏洞

本次更新最引人注目的部分是 多项安全修复。DuckDB 团队修复了数个可能导致越界读取(out-of-bounds read)的安全漏洞:

JSON 路径越界读取

@jmestwa-coder 修复的 fix out-of-bounds read in json path ReadKey lookahead 问题。当 DuckDB 解析复杂的 JSON 嵌套结构时,如果 JSON 路径查询超出实际数据边界,可能导致内存越界访问。

-- 演示 JSON 路径查询的安全处理
SELECT json_extract('{"a": {"b": 1}}', '$.a.b.c.d') AS safe_result;
-- 1.5.5 之前:可能触发未定义行为
-- 1.5.5 之后:安全返回 NULL 或抛出明确错误

字符串转换越界读取

同一位贡献者还修复了 fix out-of-bounds read in string to struct castfix out-of-bounds read in dictionary string decompression 两个问题。这些漏洞在处理特殊编码字符串或字典压缩数据时可能被触发。

其他安全修复

  • fix out-of-bounds read on empty byte array decimals — 空字节数组的十进制处理
  • backport the out-of-bounds security fixes made in #23100 — 从主分支回溯移植的安全修复

建议所有生产环境用户立即升级至 1.5.5。

核心性能改进

Parquet 处理优化

DuckDB 在 1.5.5 中对 Parquet 文件处理进行了多项改进:

  1. 拒绝不一致的 DATA_PAGE_V2parquet: reject DATA_PAGE_V2 pages with inconsistent compressed_page_size
  2. 修复 RLE 损坏误报Fix false RLE corruption error
  3. 改进 RLE 损坏错误消息Improve rle corruption error messages
  4. 修复行组过滤后的聚合统计Fix min/max aggregate stats when row groups filtered
  5. 修复 128 位 DECIMAL 交换问题Fix swapped min/max for multi-row-group 128-bit DECIMAL in RETURN_STATS
-- 示例:利用改进的 Parquet 统计信息加速查询
CREATE TABLE parquet_stats AS
SELECT * FROM parquet_scan('s3://bucket/data/*.parquet')
WHERE date >= '2026-01-01';
-- 1.5.5 中的 min/max 统计更准确,分区裁剪更高效

内存管理改进

  • 修复 TemporaryMemoryManager 死锁Fix deadlock in TemporaryMemoryManager — 这是一个严重问题,在高并发场景下可能导致数据库挂起
  • 修复外部哈希聚合段错误Fix segfault in external hash aggregate when radix bits grow after going external — 大数据集排序分组不再崩溃
  • 修复缓存驱逐节点内存泄漏Fix eviction node memleak when external file write fails
# Python 示例:内存管理改进后的大数据处理
import duckdb

con = duckdb.connect(":memory:", config={
    'temp_directory': '/tmp/duckdb_temp',
    'max_memory': '8GB',
    'threads': '4'
})

# 1.5.5 中,即使临时写入失败也不会泄漏内存
result = con.execute("""
    SELECT category, SUM(revenue) 
    FROM read_parquet('large_dataset/*.parquet')
    GROUP BY category
    ORDER BY SUM(revenue) DESC
""").fetchdf()

功能增强

窗口函数改进

@hawkfish 贡献了三个重要的窗口函数修复:

  • 有序 FIRST_VALUE 边框处理Issue #23457: Ordered FIRST_VALUE Framing
  • CUME_DIST 下溢修复Issue #23641: CUME_DIST Underflow
  • RANGE ZERO 边界情况Issue #23664: RANGE ZERO
-- 示例:改进的窗口函数行为
SELECT 
    date,
    revenue,
    FIRST_VALUE(revenue) OVER (
        ORDER BY date 
        RANGE BETWEEN INTERVAL '7' DAY PRECEDING AND CURRENT ROW
    ) AS week_first,
    CUME_DIST() OVER (ORDER BY revenue) AS revenue_rank
FROM sales_data;

Common Aggregate CTEs

新增了对公共表表达式中聚合函数的支持:Issue #23383: Common Aggregate CTEs。这允许你在 CTE 中预聚合数据,然后在后续查询中进一步操作。

-- Common Aggregate CTE 示例
WITH monthly_sales AS (
    SELECT 
        DATE_TRUNC('month', order_date) AS month,
        SUM(amount) AS total_sales,
        COUNT(*) AS order_count
    FROM orders
    GROUP BY DATE_TRUNC('month', order_date)
)
SELECT 
    month,
    total_sales,
    SUM(total_sales) OVER (ORDER BY month) AS cumulative_sales
FROM monthly_sales;

Variant 类型改进

  • 正确获取完全展平 variant 的类型值统计Correctly get typed value stats for fully shredded variants
  • Lambda 绑定传播到 try 运算符Propagate lambda bindings into try operator
  • 正确提升 SUGGEST_NEW 到 REQUIRE_NEW:针对 variant / geometry 列

扩展生态更新

1.5.5 同时更新了多个核心扩展:

扩展更新内容
Iceberg版本提升,支持更多特性
Unity Catalog包含回填修复
HTTPFS请求体长度日志、传输错误显示
Postgres/MySQL/SQLite兼容性更新
LanceRust 1.97 构建修复
Quack升级到最新 HEAD
DuckLake版本提升
-- HTTPFS 扩展改进:更好的错误诊断
INSTALL httpfs;
LOAD httpfs;

-- 现在可以看到请求体长度和传输错误
SELECT * FROM read_json_auto('https://api.example.com/data.json');
-- 日志中会显示请求体长度和任何传输错误

ADBC 与 CAPI 改进

  • ADBC URI 方案支持[ADBC] Add support for duckdb:// URI scheme in URI option
  • ADBC Statistics API 支持fix(adbc): support the ADBC Statistics API
  • CAPI 标量子查询崩溃修复Fix/capi scalar bind subquery crash
  • CAPI 缺失语句类型Add missing statement types to capi
# ADBC duckdb:// URI 方案示例
import adbc_database
import adbc_dbapi

with adbc_database.open("duckdb://my_database.db") as database:
    with adbc_dbapi.connect(database) as connection:
        with connection.cursor() as cursor:
            cursor.execute("SELECT version()")
            print(cursor.fetchone())

并发与事务改进

  • 修复并发 ALTER + INSERT 崩溃Fix concurrent ALTER and INSERT crash — 这是高并发场景下的关键修复
  • 修复 DROP COLUMN 元数据损坏Fix DROP COLUMN corrupting per-column metadata block bookkeeping
  • 依赖管理器改进Register oid of dependencies in the DependencyManagerUse correct start time when verifying dependencies
-- 1.5.5 中,以下并发操作不再导致崩溃
BEGIN;
ALTER TABLE my_table ADD COLUMN new_field VARCHAR;
INSERT INTO my_table VALUES (1, 'data');
COMMIT;

升级指南

安装 DuckDB 1.5.5

# pip 安装
pip install duckdb==1.5.5

# Conda 安装
conda install -c conda-forge duckdb=1.5.5

# CLI 安装
curl -L https://github.com/duckdb/duckdb/releases/download/v1.5.5/duckdb_cli-linux-amd64.zip -o duckdb.zip
unzip duckdb.zip
chmod +x duckdb

验证安装

import duckdb
print(duckdb.__version__)  # 应输出 1.5.5

与传统数据库对比

特性DuckDB 1.5.5PostgreSQLMySQLPandas
安装复杂度零依赖,单二进制需配置服务端需配置服务端需 Python 环境
并行执行自动多线程有限并行有限并行单线程
Parquet 原生支持✅ 直接查询❌ 需扩展❌ 需扩展✅ 通过 pyarrow
JSON 处理完整路径查询JSONBJSON✅ 通过 json 模块
内存占用按需分配连接级分配连接级分配全量加载
安全补丁频率每个补丁版本季度更新季度更新N/A
窗口函数完整 SQL 标准完整部分需手动实现

变现建议

对于企业用户和数据团队,DuckDB 1.5.5 的升级带来以下商业价值:

1. 降低基础设施成本

通过更高效的 Parquet 处理和内存管理,相同查询可在更少资源上完成。对于日均 TB 级数据分析的团队,预计可节省 20-40% 的计算成本

2. 提高数据管道可靠性

修复并发 ALTER + INSERT 崩溃和 TemporaryMemoryManager 死锁问题,意味着 ETL 管道的失败率将显著降低。对于依赖定时数据管道的业务,每次管道失败可能意味着 数千美元的业务损失

3. 安全合规

修复多个越界读取漏洞对于需要满足安全审计要求的企业至关重要。在金融、医疗等受监管行业,未及时修补的安全漏洞可能导致合规罚款

4. 加速分析洞察

改进的窗口函数性能和 Common Aggregate CTEs 支持,使得复杂分析查询的执行速度更快。数据分析师可以更快地迭代分析方案,将洞察产出时间从小时级缩短到分钟级

5. 无缝迁移

对于正在使用 PostgreSQL/MySQL 进行 OLAP 分析的团队,1.5.5 的 CAPI 和 ADBC 改进使得迁移更加平滑。可以先用 DuckDB 做分析层,再逐步迁移核心负载。

总结

DuckDB 1.5.5 虽然是一个补丁版本,但其涵盖的内容远不止"修修 bug"那么简单。从安全修复到性能优化,从窗口函数改进到并发处理增强,这个版本为生产环境用户提供了重要的稳定性和安全性提升。

强烈建议所有运行 1.5.x 系列的用户尽快升级。

完整变更日志:GitHub Releases v1.5.5 安装指南:DuckDB Installation

📺 Watch video tutorials → Olap Studio YouTube

Subscribe for more DuckDB & AI automation tutorials

使用 Hugo 构建
主题 StackJimmy 设计

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

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

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