SQLite 3.53:关键 Bug 修复和新 SQL 函数
SQLite 3.53 发布了——这是一个公共领域的紧凑型嵌入式 C 数据库引擎。该库非常适合集成到应用中,而无需许可限制。前一版本 3.51 发布于 2025 年 11 月,3.52 版本被取消。联盟资助其开发。
本版本重点提升 WAL 模式稳定性、ALTER TABLE 增强功能以及 JSON 工具。查询优化提升了表合并以及 UNION/INTERSECT/EXCEPT 操作的性能。
WAL 模式下数据库损坏的关键修复
Write-Ahead Logging 模式导致数据库损坏的 bug 已修复。该问题可追溯至 2010 年(SQLite 3.7.0),在竞争条件下显现:多个连接同时打开数据库并尝试向同一文件写入/提交事务。这种故障很少见,仅在测试场景中可重现。
此修复对于使用 WAL 的多线程应用至关重要,在此类应用中并发访问是常态。中高级开发者将欣赏消除这一潜在漏洞而无回归问题。
DDL 增强:ALTER TABLE 和 REINDEX EXPRESSIONS
ALTER TABLE 命令现在支持删除 NOT NULL 和 CHECK 约束。非常适合无需全表重建的模式演进。
新的 REINDEX EXPRESSIONS 命令用于重建基于表达式(列上函数或操作)的索引。用于在数据变更后恢复过时的索引。
示例场景:
- 更新期间基于 UPPER(column) 的索引会退化。
- REINDEX EXPRESSIONS(name) 恢复完整性。
来自其他数据库的表上的临时触发器(CREATE TEMP TRIGGER)现在可以修改表或读取数据。
JSON 函数和 VACUUM 改进
新增 json_array_insert() 和 jsonb_array_insert(),用于向 JSON 数组插入元素,同时保留顺序和类型。
带有 URL 目标的 VACUUM INTO 现在支持 reserve=N 来设置数据库备份副本数量。
新增 JSON 功能列表:
- json_array_insert(json, path, value):按路径插入。
- jsonb_array_insert(jsonb, path, value):二进制变体,提升性能。
- 支持位置和命名插入。
sqlite3 CLI 工具的改进
集成了 QRF(Query Result Formatter)库,用于可读的查询结果输出。
命令变更:
.mode扩展了新格式(默认带框表格)。- 表格输出中数字右对齐。
- 点命令后忽略分号
;。 - 命令行中的 .sql/.txt 文件作为 SQL + 点命令执行。
.timer once—— 仅为下一个查询计时。.progress -timeout S—— 超时中断。.indexes将模式应用于索引名称,而非表。
这些功能加速了终端中的调试和分析。
优化和平台变更
查询规划器针对表合并和 EXCEPT/INTERSECT/UNION 进行了优化——在大规模数据集上性能提升。
浮点数到文本转换更快(类似 sprintf 操作)。
WebAssembly 构建:新的 VFS opfs-wl 使用 Web Locks API 进行锁定,类似于 opfs。
sqlite3_rsync:-p/--port 选项用于网络 rsync。
停止支持 Windows RT。
通过热点路径中的向量化改进了浮点数到文本性能。
关键要点
- 修复了罕见但致命的 WAL 多连接访问竞争条件。
- ALTER TABLE 支持删除 NOT NULL/CHECK;REINDEX EXPRESS 用于基于表达式的索引。
- json_array_insert() 和带 QRF 的 CLI 用于 JSON/调试。
- UNION/EXCEPT 和浮点格式化的优化。
- WebAssembly:带 Web Locks 的 opfs-wl VFS。
— Editorial Team
暂无评论。