如何用一列创建一个mnesia表&从那里读/写?

时间:2014-02-14 20:29:56

标签: erlang mnesia

-record(ng, {ng}).

mnesia:create_table(ng, [{type, set}, {attributes, record_info(fields, ng)}]).

我收到:{aborted,{bad_type,ng,{attributes,[ng]}}}错误。

怎么了?如何使用一列(名为)创建一个mnesia表?

2 个答案:

答案 0 :(得分:3)

记录必须至少包含2个字段。这可行:

-record(ng, {ng, extrafield}).
mnesia:create_table(ng, [{type, set}, {attributes, record_info(fields, ng)}]).

来自http://www.erlang.org/doc/man/mnesia.html#create_table-2

“除了密钥外,该表必须至少有一个额外的属性。”

编辑:找不到单个列是否可行的答案,但this 2007 thread表示没有。

我个人使用键/值列来执行此操作,如下所示:

-record(proximaglobal, {key, value}).
mnesia:create_table(proximaglobal, [{attributes, record_info(fields, proximaglobal)}, {disc_only_copies, [node()]}]).
mnesia:sync_transaction(fun() -> mnesia:write(#proximaglobal{key=time, value=WorldTime}) end).
mnesia:sync_transaction(fun() -> mnesia:read(proximaglobal, time) end).

答案 1 :(得分:0)

  

{attributes,AtomList}应该填充表的记录的属性名称列表。默认值为[key,val]。除密钥外,该表必须至少有一个额外属性。