4

我定义了一个名为log. 我想用 name 创建一个 mnesia 表log_table。当我尝试将记录写入表时,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

我错过了什么?

4

3 回答 3

7

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

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

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

于 2008-09-24T12:51:38.343 回答
2

我已经找到了。当我将mnesia:create_table呼叫更改为此

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

一切正常。

于 2008-09-24T09:35:03.620 回答
0

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

于 2008-09-24T09:24:12.740 回答