gpt4 book ai didi

transactions - Mnesia 异常退出 : {aborted, {bad_type, Record}}

转载 作者:行者123 更新时间:2023-12-04 04:00:17 26 4
gpt4 key购买 nike

我创建了一个名称与其记录名称不同的表。下面是代码片段%%----记录定义--------------------
-记录(对象,{键,值})。
%% ---- 创建表 -------------------------------------
{atomic,ok} = mnesia:create_table(mytable,[
{类型,设置},
{frag_properties,[
{node_pool,[node()]},
{n_fragments,4},
{n_disc_copies,1}]},
{属性,记录信息(字段,对象)}]
),%% ------- 插入 --------------------------------insert()->
F = 乐趣() ->
R = #对象{
key = "MyKey",
值(value)=“值(value)”
},
mnesia:write(mytable,R,write)
结尾,
mnesia:activity(transaction,F,[],mnesia_frag)。

这样做时,mnesia 大声喊叫。表创建的很好,可以在tv:start().查看或在 mnesia:info(). .这是我在 shell 上看到的错误。** 异常退出:{aborted,
{坏类型,
#目的{
key = "MyKey",
值(value)=“值(value)”}}}
在函数 mnesia:wrap_trans/6 (mnesia.erl, line 395)

现在,通常,我认为当创建表时使用的记录定义与插入表中的记录结构不同时,会出现这样的错误。我想知道这只是我使用的函数的问题,即:mnesia:write/3当表名与记录名不同时,这会有所帮助。
我曾尝试删除架构并重新创建它,但都是徒劳的。当我不使用时 mnesia:write/3 ,记录被正确插入到表中。但是我的应用程序需求是这样的,我将创建几个不同的表,但它们存储相同的记录结构/定义。我想要不同的 table ,但他们的 record_info定义是一样的。在文档的某个地方,我读到这是非常可能的。我正在运行:Erlang otp R15B, mnesia-4.6 , windows 7 enterprise, 32-bit operating system, Dell laptop, intel core i5, 4GB RAM 我正在处理的所有其他 erlang 项目都很好,他们没有像这个项目那样奇怪/意外的行为。有什么建议吗?

最佳答案

您必须使用 {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)}]
),

来自 docs :

{record_name, Name}, where Name must be an atom. All records, stored in the table, must have this name as the first element. It defaults to the same name as the name of the table.

关于transactions - Mnesia 异常退出 : {aborted, {bad_type, Record}},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10621808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com