5

我创建了一个名称与其记录名称不同的表。下面是代码片段

%% ---- 记录定义 --------------------------------
-记录(对象,{键,值})。
%% ---- 创建表 ------------------------------------- {atomic,ok} = mnesia:create_table(mytable,[ {类型,设置}, {frag_properties,[ {node_pool,[node()]}, {n_fragments,4}, {n_disc_copies,1}]}, {属性,记录信息(字段,对象)}] ),

%% ------- 插入 --------------------------------
insert()-> F = 乐趣()-> R = #对象{ 键 = "我的钥匙", 价值 = “价值” }, 记忆:写(mytable,R,写) 结尾, mnesia:activity(transaction,F,[],mnesia_frag)。
在这样做的时候,mnesia 大声喊叫着。该表创建得非常好,可以在tv:start().或 中查看mnesia:info().。这是我在外壳上看到的错误。
** 异常退出:{中止,
                       {坏类型,
                           #目的{
                               键 = "我的钥匙",
                               价值=“价值”}}}
     在函数 mnesia:wrap_trans/6 中(mnesia.erl,第 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 项目都很好,它们没有像这个一样的奇怪/意外行为。
有什么建议么 ?

4

1 回答 1

12

{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)}]
            ),

文档

{record_name, Name},其中 Name 必须是一个原子。存储在表中的所有记录都必须将此名称作为第一个元素。它默认与表的名称相同。

于 2012-05-16T16:37:00.367 回答