【问题标题】:Mnesia create table errorMnesia 创建表错误
【发布时间】:2017-11-04 17:15:58
【问题描述】:

我尝试使用以下方法创建一个表,

mnesia_init() -> 
mnesia:create_schema([node()]),
case mnesia:start() of
    ok ->
        try
            mnesia:table_info(type, bill_cdr_file_counter)
        catch 
            exit:_ ->
                mnesia:create_table(bill_cdr_file_counter,[{attributes,[key,value]},
                                                           {disc_copies,[node()]}])
        end;
    {error, Reason} ->
        error_logger:error_report(["Mnesia start error: ", Reason]),
        {error, Reason}
end.

我使用的记录如下,

-record(bill_cdr_file_counter, {key,value}).

但作为回应,我得到了这个,

{aborted,{bad_type,bill_cdr_file_counter,{disc_copies,log@mbsmsc1}}}

【问题讨论】:

    标签: erlang mnesia


    【解决方案1】:

    您的代码对我来说很好用。我第一次运行它时,我得到了返回值:

    {atomic,ok}
    

    第二次运行,得到返回值:

    {aborted,{already_exists,bill_cdr_file_counter}}
    

    当我这样做时:

    4> observer:start() 
    

    然后单击Table View 选项卡,然后在菜单栏中选择View>Mnesia Tables,我看到bill_cdr_file_counter 表列出。我正在使用Erlang 19.2。你用的是什么版本的 Erlang?

    我也试过了:

    3> node().
    nonode@nohost
    

    或者,如果我这样开始 erl:

    $ erl -sname gandalf
    
    1> node().
    gandalf@MyMBP
    

    您的错误消息显示 node() 正在返回:

    log@mbsmsc1
    

    这是我看到的您的代码和我运行的代码之间的唯一区别。

    【讨论】:

    • 是的,当我仅包含 {disc_copies,[node()]} 选项时出现上述错误,否则我收到 {ok,atomic}。但节点 'log@mbsmsc1' 启动并运行所以我不明白什么是错误。
    • @Hasitha,你能ping通那个节点吗?也许如果你描述你的设置,有人可以弄清楚发生了什么。节点是如何启动的?
    猜你喜欢
    • 2014-06-06
    • 2016-07-12
    • 2013-06-20
    • 2012-11-04
    • 2015-12-20
    • 1970-01-01
    • 2013-02-11
    • 2011-10-12
    • 2015-04-12
    相关资源
    最近更新 更多