You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何只读操作触发‘attempt to write a readonly database’错误?

问题原因与解决办法

核心原因

SQLite 即便执行 .tables、普通查询这类看似只读的操作,也会默认尝试以读写模式打开数据库,同时会尝试在数据库所在目录创建临时日志文件(比如写前日志WAL或回滚日志)。如果数据库文件本身或其所在目录没有写入权限,就会触发"attempt to write a readonly database"错误——哪怕你的操作本身不修改数据。

另外,select * from t_I_dont_know_if_this_table_exists; 触发的"Parse error"是伴随前面写错误出现的次生问题,根源还是读写模式下的权限不足。

解决步骤

直接以只读模式打开数据库,跳过SQLite的写权限检查:

sqlite3 -readonly /nix/var/nix/db/db.sqlite

打开后再执行 .tables 或查询语句,就不会再触发权限错误了。

补充说明

Nix的数据库文件 /nix/var/nix/db/db.sqlite 本身属于root用户,普通用户仅有读权限,且所在目录也没有普通用户的写入权限,这是Nix的安全设计。必须显式指定只读模式,才能让SQLite放弃尝试写操作相关的权限验证。

内容的提问来源于stack exchange,提问作者Pierre-olivier Gendraud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 10:25:20