为何Sqliteman无法加载SQLite扩展?已启用ENABLE_LOAD_EXTENSION
我之前也碰到过一模一样的情况,核心问题其实和编译选项无关——你已经确认ENABLE_LOAD_EXTENSION生效了,但SQLite出于安全考虑,默认会在运行时禁用扩展加载权限,必须手动开启才行。
为什么命令行能成功?
sqlite3命令行工具做了特殊处理:如果你用.load命令加载扩展,它会自动调用底层的sqlite3_enable_load_extension() API开启权限;就算你直接执行SELECT load_extension(),大概率也是之前已经通过PRAGMA或其他方式开启过权限了。但Sqliteman作为GUI客户端,默认不会自动打开这个权限开关。
具体解决步骤
在Sqliteman里按顺序执行以下两条SQL语句即可:
- 先手动开启扩展加载权限:
PRAGMA enable_load_extension = 1;
- 再执行你的扩展加载语句:
SELECT load_extension('path/extension.so');
额外提醒
- 最好给
extension.so用绝对路径,或者确认路径是相对于Sqliteman当前工作目录的,避免因路径找不到触发其他错误; - 极少数情况下,部分SQLite版本需要先关闭
secure_delete才能开启扩展权限,如果上面的步骤无效,可以尝试先执行PRAGMA secure_delete = OFF;再开启权限。
内容的提问来源于stack exchange,提问作者Kyle Barbour
相关产品推荐
相关产品推荐

