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

相关推荐
小陈工2 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
科技小花7 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸7 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain7 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希7 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神8 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员8 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java8 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿8 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴8 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存