2008-09-24 152 views
4

我定义了一条名为log的记录。我想创建名称为log_table的mnesia表。当我尝试写一个记录表,我得到bad_type错误如下:Mnesia写入失败

([email protected])4> mnesia:create_table(log_table, [{ram_copies, [node()]}, 
               {attributes, record_info(fields, log)}]). 
{atomic,ok} 

([email protected])5> mnesia:dirty_write(log_table, #log{id="hebelek"}). 
** exception exit: {aborted,{bad_type,#log{id = "hebelek"}}} 
in function mnesia:abort/1 

我缺少什么?

回答

7

默认情况下,记录名称假定与表名相同。

要解决这个问题,您应该为您的表命名为log或在您的表格选项中附加选项{record_name, log}(就像您在修复中所做的那样)。

通常情况下,让您的记录和表命名为相同的东西是很好的做法,它使代码更易于阅读和调试。您也可以使用mnesia:write/1函数,只将您的记录作为参数。然后,Mnesia通过查看名字来计算出哪张表可以记录下来。

0

您对日志记录的定义看起来如何?如果您从头开始创建一个新表(即先删除Mnesia @目录),是否会得到相同的错误?

2

我找到了。当我更改mnesia:create_table时致电

mnesia:create_table(log_table, [{ram_copies, [node()]}, 
           {record_name, log}, 
           {attributes, record_info(fields, log)}]). 

一切正常。