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通过查看名称找出要在哪个表中放入记录。