Mnesia写入失败

时间:2020-03-06 14:39:00  来源:igfitidea点击:

我定义了一条名为" log"的记录。我想创建一个名为log_table的mnesia表。当我尝试将记录写入表时,出现如下错误:Bad_type:

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

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

我想念什么?

解决方案

我们对日志记录的定义如何?如果我们从头开始创建新表(即首先删除Mnesia @目录),是否会遇到相同的错误。

我找到了当我将mnesia:create_table更改为此

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

一切正常。

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

要解决此问题,我们应该将表命名为" log",或者在表选项中添加选项" {record_name,log}"(就像在修复中所做的那样)。

通常最好的做法是让记录和表具有相同的名称,这使代码更易于阅读和调试。然后,我们还可以使用mnesia:write / 1函数,仅将记录作为唯一参数。然后,Mnesia通过查看名称找出要在哪个表中放入记录。