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

相关推荐
口嗨农民工7 分钟前
3.2 mysql客户端和服务器的启动与停止
数据库·mysql
e***19351 小时前
【SqlServer】SQL Server Management Studio (SSMS) 下载、安装、配置使用及卸载——保姆级教程
数据库·sqlserver
6***B481 小时前
存储过程(SQL)
android·数据库·sql
小马爱打代码1 小时前
避坑指南:MySQL 迁移到 TiDB
数据库·mysql·tidb
一个天蝎座 白勺 程序猿2 小时前
Apache IoTDB(10):数据库操作——从查询到优化的全链路实践指南
数据库·apache·时序数据库·iotdb
普普通通的南瓜3 小时前
IP证书在关键信息基础设施安全防护中的实践与挑战
网络·数据库·网络协议·tcp/ip·安全·ssl
合作小小程序员小小店3 小时前
桌面开发,超市管理系统开发,基于C#,winform,sql server数据库
开发语言·数据库·sql·microsoft·sqlserver·c#
quweiie3 小时前
thinkphp8.0链接SQL SERVER2022数据库
数据库·sqlserver·thinkphp
Databend4 小时前
如何打造AI时代的数据基石 | Databend Meetup 上海站
数据库
老华带你飞4 小时前
海产品销售系统|海鲜商城购物|基于SprinBoot+vue的海鲜商城系统(源码+数据库+文档)
java·前端·数据库·vue.js·论文·毕设·海鲜商城购物系统