BaseX 11.9执行db:delete时出现‘Key does not exist’错误求助
BaseX 11.9删除文档时"Key does not exist"错误的解决方法
问题场景
使用BaseX 11.9管理约10GB的XML文档,文档URI示例:
/mono/content/b-97807xxxx/b-97807xxxx_b-97807xxxx/content/latest/97807xxxx_txt_xml.xml/mono/content/b-97807xxxx/b-97807xxxx_b-97807xxxx/properties.xml
执行删除命令db:delete('mono', '/mono/content/b-97807xxxx/b-97807xxxx_b-97807xxxx/content/latest/97807xxxx_txt_xml.xml')时触发错误:
Error: Improper use? Potential bug? Your feedback is welcome: Contact: basex-talk@mailman.uni-konstanz.de Version: BaseX 11.9 Java: Oracle Corporation, 17.0.12 OS: Windows Server 2022, amd64 Stack Trace: java.lang.RuntimeException: Key does not exist: '209975' at org.basex.util.Util.notExpected(Util.java:68) at org.basex.index.value.UpdatableDiskValues.delete(UpdatableDiskValues.java:99) at org.basex.data.Data.indexDelete(Data.java:1085) at org.basex.data.Data.delete(Data.java:684) at org.basex.query.up.atomic.Delete.apply(Delete.java:39) at org.basex.query.up.atomic.AtomicUpdateCache.applyUpdates(AtomicUpdateCache.java:290) at org.basex.query.up.atomic.AtomicUpdateCache.execute(AtomicUpdateCache.java:274) at org.basex.query.up.DataUpdates.apply(DataUpdates.java:165) at org.basex.query.up.ContextModifier.apply(ContextModifier.java:120) at org.basex.query.up.Updates.apply(Updates.java:181) at org.basex.query.QueryContext.update(QueryContext.java:668) at org.basex.query.QueryContext.lambda$cache$6(QueryContext.java:609) at org.basex.query.QueryContext.run(QueryContext.java:766) at org.basex.query.QueryContext.cache(QueryContext.java:607) at org.basex.query.QueryProcessor.cache(QueryProcessor.java:120) at org.basex.core.cmd.AQuery.run(AQuery.java:82) at org.basex.core.Command.run(Command.java:233) at org.basex.core.Command.execute(Command.java:93) at org.basex.gui.GUI.execute(GUI.java:430) at org.basex.gui.GUI.lambda$execute$5(GUI.java:375) at java.base/java.lang.Thread.run(Thread.java:842)
解决方法
1. 重建数据库索引
索引损坏是这类错误的常见诱因,优先尝试重建:
- 控制台执行:
db:reindex('mono') - GUI界面操作:
Database -> Reindex
2. 修复数据库
若重建索引无效,使用内置修复工具:
- 控制台执行:
db:repair('mono')
该命令会检测并修复数据库文件结构的不一致问题。
3. 导出后重新导入数据库
上述方法失效时,彻底重建数据库:
- 导出所有内容到本地目录:
db:export('mono', '/path/to/your/export/directory') - 删除原数据库:
db:drop('mono') - 重新创建并导入:
db:create('mono', '/path/to/your/export/directory')
4. 验证文档路径
确认目标文档URI是否与数据库中完全匹配,可通过db:list('mono')列出所有文档路径,核对是否存在拼写错误或路径差异。
5. 升级BaseX版本
该错误可能是特定版本的已知bug,建议升级到BaseX最新稳定版,新版本通常会修复底层索引操作的问题。
内容的提问来源于stack exchange,提问作者Dharmendra Kumar Singh
相关产品推荐
相关产品推荐

