Erlang Mnesia的嵌套交易已终止

问题描述

| 我有以下代码:
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模块。 我究竟做错了什么 ?以及如何正确? 谢谢。     

解决方法

        您是正确的,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个碎片,则以上内容基本上等同于:
[mnesia:clear_table(T) || T <- [names,names_frag2,names_frag3,names_frag4]].
表名称来自:
mnesia_frag:frag_names(names).
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...