Mnesia异常退出:{aborted,{bad_type,Record}}

Muz*_*hua 5 erlang transactions mnesia

我创建了一个名称与其记录名称不同的表.以下是代码段

%% ---- record definition --------------------------------
-record(object,{key,value}).
%% ---- create table ------------------------------------- {atomic,ok} = mnesia:create_table(mytable,[ {type,set}, {frag_properties,[ {node_pool,[node()]}, {n_fragments,4}, {n_disc_copies,1}]}, {attributes,record_info(fields,object)}] ),

%% ------- inserting --------------------------------
insert()-> F = fun() -> R = #object{ key = "MyKey", value = "Value" }, mnesia:write(mytable,R,write) end, mnesia:activity(transaction,F,[],mnesia_frag).
在这样做的过程中,mnesia大声呼喊.该表的建立是非常好,并且可以在观看tv:start().mnesia:info()..这是我在shell上看到的错误.
** exception exit: {aborted,
                       {bad_type,
                           #object{
                               key = "MyKey",
                               value = "Value"}}}
     in function  mnesia:wrap_trans/6 (mnesia.erl, line 395)
现在,通常,我认为当创建表时使用的记录定义与插入表中的记录结构不同时,会出现这样的错误.我想知道这只是我正在使用的函数的一个问题,即:mnesia:write/3当表名与记录名不同时,这会有所帮助.

我已经尝试删除模式并重新创建它,但都是徒劳的.当我不使用时mnesia:write/3,记录将正确插入表中.但是我的应用程序需求是这样的,我将创建几个不同的表,但它们存储相同的记录结构/定义.我想拥有不同的表,但它们的record_info定义是相同的.

在文档的某处,我读到这很有可能.我正在运行:Erlang otp R15B, mnesia-4.6 , windows 7 enterprise, 32-bit operating system, Dell laptop, intel core i5, 4GB RAM 我正在处理的所有其他erlang项目都很好,它们没有像这样的奇怪/意外行为.
有什么建议 ?

Isa*_*sac 10

您必须{record_name, object}在创建表时使用该属性.例如

{atomic,ok} = mnesia:create_table(mytable,[
                {type,set},
                {frag_properties,[
                            {node_pool,[node()]},
                            {n_fragments,4},
                            {n_disc_copies,1}]},
                {record_name, object},
                {attributes,record_info(fields,object)}]
            ),
Run Code Online (Sandbox Code Playgroud)

来自文档:

{record_name,Name},其中Name必须是一个原子.存储在表中的所有记录都必须将此名称作为第一个元素.它默认使用与表名相同的名称.