You need to enable JavaScript to run this app. MarkLogic如何向指定forest插入文档 解决同URI跨forest报错
优惠活动
大模型
产品
解决方案
定价
更多

MarkLogic如何向指定forest插入文档 解决同URI跨forest报错

MarkLogic插入指定多forest触发XDMP-PLACEKEYSLOCKING错误解决方案

报错信息

[1.0-ml] XDMP-PLACEKEYSLOCKING: xdmp:document-insert("/xquery/catalog.xml", 557........., (), (), 0, (xs:unsignedLong("13222250964842568399"), xs:unsignedLong("15490631252765310070"))) -- Fast locking cannot be used with place keys

错误根因

当调用xdmp:document-insert时如果传入了多个目标forest作为放置键参数,而当前数据库开启了*快速锁定(Fast locking)*配置时,就会触发该报错。快速锁定模式本身不支持同时指定多个目标forest写入。

复现同URI跨forest插入的解决方案

方案1:调整数据库锁定配置

  • 进入MarkLogic管理后台的test-dup数据库配置页面
  • 将「快速锁定」配置项从默认的fast修改为strict或off
  • 重启test-dup关联的所有forest后即可生效

注意:关闭快速锁定会降低数据库写入吞吐量,生产环境调整前请先做性能压测评估

方案2:修改插入代码,单次仅指定单个目标forest

你当前使用的原始代码直接传入了test-dup的所有forest列表,才触发了冲突。如果要将同URI的文档写入不同forest,每次调用插入函数时仅指定一个目标forest即可,参考修改后的代码:

xquery version "1.0-ml";
let $XML:=<catalog>
             <product dept="WMN">
             <number>557</number>
             <name language="en">Fleece Pullover</name>
             <colorChoices>navy black</colorChoices>
</product>
let $filename:= "/xquery/catalog.xml"
(: 每次仅传入1个目标forest ID,即可避免快速锁定冲突 :)
let $target-forest := xdmp:database-forests(xdmp:database("test-dup"))[1]
return
xdmp:document-insert($filename,$XML,(),(),0,$target-forest)

如果要插入到第二个forest,只需要把下标[1]改成[2]即可。

内容的提问来源于stack exchange,提问作者thichxai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 22:24:02