SQLite 3.51.0发布,新功能解读

SQLite 开发团队于 2025 年 11 月 04 日发布了 SQLite 3.51.0 版本,距离 SQLite 3.50.0 的发布间隔了五个多月,也带来不少新功能和性能优化。

按照惯例,我们来解读一下新版本的改进功能。

JSON 函数

新版本增加了两个 JSON 函数:jsonb_each() 以及 jsonb_tree()

它们的作用与已有的 json_each() 和 json_tree() 函数相同,区别在于当返回结构中 type 字段类型为 array 或者object 时,value 字段的类型是 JSONB。例如:

CLI 接口

命令行客户端程序(sqlite3)增强了以下功能:

  • .timer 指令的的精度提高到了微秒级,可以更加准确地显示 SQL 语句执行时间。
  • 增强了 box 和 column 输出格式下的宽字符显示。
  • .imposter 命令支持只读替代表,可以与 VACUUM 操作配合使用,而且不需要 --unsafe-testing 选项。
  • 命令行选项和 .open 命令增加了一个 --ifexists 参数,只有当数据库文件存在时才会打开数据库,不会创建新的空数据库。
  • .width 命令支持的最大列宽限制在 30000,避免恶意设置。

性能增强

  • 新版本对于只读事务的提交可以使用更少的 CPU 周期;
  • 可以更早检测到由于一个或者多个表数据为空而导致的 JOIN 查询返回为空的情况。
  • 如果标量子查询的结果不改变整个表达式的结果,可以省略子查询的计算。
  • 当窗口函数使用了 BETWEEN :x FOLLOWING AND :y FOLLOWING 子句并且 :y 的值较大时,查询速度会更快。

SQL 函数

对于内置的 printf() 以及 format() 函数,如果指定了 # 标志并且没有指定 + 标志,同时所有数字都是 0,那么对于负的浮点数,不会显示最前面的负号(-)。

这就意味着我们可以使用"%#f"或者类似格式避免输出"-0.00"这样的结果,而是显示 "0.00"。

API

  • 新增 PRAGMA wal_checkpoint=NOOP; 命令以及用于 sqlite3_wal_checkpoint_v2() 的 SQLITE_CHECKPOINT_NOOP 参数。
  • 添加 sqlite3_set_errmsg() 接口,提供扩展插件设置错误代码和信息。
  • 添加 sqlite3_db_status64() 接口,返回结果与已有的 sqlite3_db_status() 接口相同,但会返回 64 位结果。
  • sqlite3_db_status() 和 sqlite3_db_status64() 接口添加 SQLITE_DBSTATUS_TEMPBUF_SPILL 选项,记录由于内存不足写入磁盘临时文件的字节数量。
  • session 扩展中添加了 sqlite3changeset_apply_v3() 接口,可以将变更集应用到数据库。
  • TCL 接口为 eval 命令增加了一个 -asdict 标志,用于将行数据类型设置为字典而不是数组。同时,用户自定义函数现在可以中断(break)执行并返回 NULL 值。

源码调整

carray 和 percentile 扩展已经内置到合并代码中,不过默认处于禁用状态,需要别在编译时使用 -DSQLITE_ENABLE_CARRAY 以及 -DSQLITE_ENABLE_PERCENTILE 选项来激活。

sqlite3.h 头文件中新增了三个宏定义:

  • SQLITE_SCM_BRANCH,获取源代码的分支名称;
  • SQLITE_SCM_TAGS,源代码 check-in 的标签列表(空格分隔);
  • SQLITE_SCM_DATETIME,源代码 check-in 的 ISO-8601 日期和时间。

其他更新

  • 改进了 FTS5 生成的错误信息。
  • 对计算列强制执行 STRICT 类型。
  • 改进了对 VxWorks 平台的支持。
  • JavaScript/WASM 支持 64 位版本。官方标准构建版本仍然使用 32 位版本,只需要运行 make 就可以创建 64 位版本。
  • 增强了对于应用程序使用 close() 命令破坏 Posix 咨询锁导致数据库损坏的防御能力。

完整的发行说明可以参考官方文档:

https://www.sqlite.org/releaselog/3_51_0.html

相关推荐
brave_zhao2 分钟前
达梦8最终锁阻塞巡检 SQL
数据库
一 乐7 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
1.14(java)8 小时前
SQL数据库操作:从CRUD到高级查询
数据库
Full Stack Developme9 小时前
数据库索引的原理及类型和应用场景
数据库
kaizq10 小时前
AI-MCP-SQLite-SSE本地服务及CherryStudio便捷应用
python·sqlite·llm·sse·mcp·cherry studio·fastmcp
IDC02_FEIYA10 小时前
SQL Server 2025数据库安装图文教程(附SQL Server2025数据库下载安装包)
数据库·windows
辞砚技术录11 小时前
MySQL面试题——联合索引
数据库·面试
萧曵 丶11 小时前
MySQL 主键不推荐使用 UUID 的深层原因
数据库·mysql·索引
小北方城市网11 小时前
分布式锁实战指南:从选型到落地,避开 90% 的坑
java·数据库·redis·分布式·python·缓存
毕设十刻11 小时前
基于Vue的人事管理系统67zzz(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js