" bad_type"尝试创建mnesia表时出错

时间:2016-03-25 01:59:19

标签: erlang mnesia

对于我的生活,无法解决这个问题。我试图创建mnesia表,但不断发现这个奇怪的错误。

这是我的命令:

ok = mnesia:create_schema(Nodes),
rpc:multicall(Nodes, application, start, [mnesia]),
{_, ok} = mnesia:create_table(rr_events,
        [{attributes, record_info(fields, rr_events)},
         {index, [#rr_events.key]},
         {disc_copies, Nodes}]),
rpc:multicall(Nodes, application, stop, [mnesia]).

这是我的记录:

-record(rr_events, {key, events=[]}).

这是错误:

=PROGRESS REPORT==== 24-Mar-2016::21:53:42 ===
         application: mnesia
          started_at: nonode@nohost
** exception error: no match of right hand side value
                    {aborted,{bad_type,rr_events,{index,[2]}}}
     in function  rr:install/1 (c:/Users/zzzz/Projects/zzz/zzz/rr/rr/_build/default/lib/rr/src/rr.erl, line 13)

知道这可能是什么吗?无法理解这一点。

2 个答案:

答案 0 :(得分:2)

!感谢这个excellent blog post引导我回答,引用:

  

此错误:

     

{中止,{bad_type,wrud_record,{指数,[2]}}}

     如果您使用记录的第一个元素来索引一个元素,则会发生

  表,如:

     

-record(wrud_record,{user,date,label,remark,url})。

     

     

mnesia:create_table(wrud_record,[{index,[user]},{attributes,   record_info(fields,wrud_record)}])

     

,所以你应该把索引改成另一个元素,比如这里的备注:

     

mnesia:create_table(wrud_record,[{index,[remark]},{attributes,   record_info(fields,wrud_record)}])

     一切都会好的。 :)

答案 1 :(得分:2)

我最近遇到过这个问题。 Learn you some Erlang声明如下:

  

请注意,您不需要在记录的第一个字段上放置索引,因为默认情况下这样做。

如果您只需要对记录的第一个元素进行索引,那么我建议省略{index, [record_name]}

此外,虽然来自LYSE的段落暗示official Erlang documentation更进一步说明:

  

指数。这是一个属性名称或整数列表,用于指定Mnesia构建和维护额外索引表的元组位置。