【问题标题】:Mnesia write failsMnesia 写入失败
【发布时间】:2010-09-12 16:06:04
【问题描述】:

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

我错过了什么?

【问题讨论】:

    标签: erlang mnesia


    【解决方案1】:

    默认记录名与表名相同。

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

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

    【讨论】:

      【解决方案2】:

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

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

      一切正常。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2011-01-17
          • 1970-01-01
          • 1970-01-01
          • 2011-04-20
          • 2018-06-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-25
          相关资源
          最近更新 更多