Muz*_*hua 5 erlang transactions mnesia
我创建了一个名称与其记录名称不同的表.以下是代码段
%% ---- record definition --------------------------------
-record(object,{key,value}).
%% ---- create table -------------------------------------
{atomic,ok} = mnesia:create_table(mytable,[
{type,set},
{frag_properties,[
{node_pool,[node()]},
{n_fragments,4},
{n_disc_copies,1}]},
{attributes,record_info(fields,object)}]
),
%% ------- inserting --------------------------------
insert()->
F = fun() ->
R = #object{
key = "MyKey",
value = "Value"
},
mnesia:write(mytable,R,write)
end,
mnesia:activity(transaction,F,[],mnesia_frag).
在这样做的过程中,mnesia大声呼喊.该表的建立是非常好,并且可以在观看tv:start().或mnesia:info()..这是我在shell上看到的错误.
** exception exit: {aborted,
{bad_type,
#object{
key = "MyKey",
value = "Value"}}}
in function mnesia:wrap_trans/6 (mnesia.erl, line 395)
现在,通常,我认为当创建表时使用的记录定义与插入表中的记录结构不同时,会出现这样的错误.我想知道这只是我正在使用的函数的一个问题,即:mnesia:write/3当表名与记录名不同时,这会有所帮助.mnesia:write/3,记录将正确插入表中.但是我的应用程序需求是这样的,我将创建几个不同的表,但它们存储相同的记录结构/定义.我想拥有不同的表,但它们的record_info定义是相同的.Erlang otp R15B, mnesia-4.6 , windows 7 enterprise, 32-bit operating system, Dell laptop, intel core i5, 4GB RAM 我正在处理的所有其他erlang项目都很好,它们没有像这样的奇怪/意外行为.Isa*_*sac 10
您必须{record_name, object}在创建表时使用该属性.例如
{atomic,ok} = mnesia:create_table(mytable,[
{type,set},
{frag_properties,[
{node_pool,[node()]},
{n_fragments,4},
{n_disc_copies,1}]},
{record_name, object},
{attributes,record_info(fields,object)}]
),
Run Code Online (Sandbox Code Playgroud)
来自文档:
{record_name,Name},其中Name必须是一个原子.存储在表中的所有记录都必须将此名称作为第一个元素.它默认使用与表名相同的名称.
| 归档时间: |
|
| 查看次数: |
2908 次 |
| 最近记录: |