如何确认SQLite是否编译JSON扩展及退出状态码异常问题
验证SQLite JSON扩展是否启用及状态码问题解答
一、验证SQLite是否编译了JSON扩展
可以通过以下几种方式确认:
- 直接执行JSON函数测试:在终端运行
sqlite3进入交互模式,执行SELECT json('{"test":1}');。如果返回错误Error: no such function: json,说明当前SQLite未启用JSON扩展;如果正常返回{"test":1},则扩展已启用。 - 查询编译选项:在SQLite交互模式中执行
SELECT * FROM pragma_compile_options();,查看结果中是否包含ENABLE_JSON1。该选项存在则表示JSON扩展已编译进SQLite,不存在则未启用。 - 检查系统包的构建参数:对于Linux发行版的预编译SQLite包,可以通过包管理工具查看构建配置。比如Debian/Ubuntu系可运行
apt show sqlite3查看包的编译参数;也可以找到对应包的源码,检查构建脚本中是否添加了-DSQLITE_ENABLE_JSON1编译宏。
二、SQLite报错后返回状态码0的问题
这不是Bug,是sqlite3命令行工具的默认设计行为:
- 命令行工具的退出码仅反映工具自身的运行状态(比如参数错误、无法打开数据库文件等),而SQL语句执行失败属于业务逻辑错误,默认不会改变退出码,因此会返回0。
- 要让SQL执行错误时返回非0状态码,只需在调用sqlite3时添加
-bail选项。例如:
这样一旦SQL执行出错,工具会立即退出并返回非0状态码,脚本就能捕获错误并停止后续清理步骤,避免数据丢失。sqlite3 -bail your_db.sqlite "SELECT json('invalid');"
内容的提问来源于stack exchange,提问作者q.undertow
相关产品推荐
相关产品推荐

