Mnesia写失败

时间:2008-09-24 08:59:02

标签: erlang mnesia

我定义了一个名为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

我错过了什么?

3 个答案:

答案 0 :(得分:7)

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

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

通常,将记录和表命名为相同的东西通常是一种好习惯,它使代码更易于阅读和调试。然后,您也可以使用mnesia:write/1函数,仅将您的记录作为参数。然后,Mnesia通过查看名称来确定将记录放入哪个表格。

答案 1 :(得分:2)

我找到了。当我更改mnesia:create_table来调用此

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

一切正常。

答案 2 :(得分:0)

您对日志记录的定义如何?如果从头创建一个新表(即首先删除Mnesia @目录),是否会出现相同的错误。