我有以下代码:
J = fun()->mnesia:clear_table(names) end.
mnesia:activity(transaction, J, [], mnesia_frag).
我收到此错误:
** exception exit: {aborted,{aborted,nested_transaction}}
我可以跑
mnesia:clear_table(names)
但由于表名在几个节点上分段,我认为我必须使用mnesia_frag模块。
我在做错了什么?它怎么会是正确的? 谢谢。答案 0 :(得分:6)
你是正确的mnesia:clear_table(names)不会清除整个碎片表。
mnesia:clear_table / 1已在事务中运行,因此您无法将其与mnesia:activity 事务 AccessContext一起使用。
而不是尝试:
mnesia:activity(sync_dirty, fun mnesia:clear_table/1, [names], mnesia_frag).
如果你看一下mnesia_frag.erl中的源代码,你会发现它只是在每个表上调用mnesia:clear_table / 1。假设4个frags,上面基本上相当于:
[mnesia:clear_table(T) || T <- [names, names_frag2, names_frag3, names_frag4]].
表名来自:
mnesia_frag:frag_names(names).