erlang - 如何创建一个包含一列的 mnesia 表并从那里读取/写入?

标签 erlang mnesia

-record(ng, {ng}).

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

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

怎么了?如何创建一个包含一列(已命名)的 mnesia 表?

最佳答案

该记录必须至少有 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).

关于erlang - 如何创建一个包含一列的 mnesia 表并从那里读取/写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21788984/

相关文章:

erlang - 在 Erlang 中使用电子邮件(POP3、IMAP、SMTP 等)?

multithreading - 其他语言的 Erlang 风格并发

windows - 在 Windows 上成功运行 Ranch 的步骤是什么?

erlang - 停止 Erlang 主管?

erlang - Mnesia:意外中止,循环交易

erlang - 删除待处理的 Mnesia 交易

programming-languages - 当我想编写视频处理应用程序时,是否有合适的 C++ 替代品?

haskell - 函数式语言的显着特征

节点之间的 Erlang Ets 表

database - 二郎 : Mnesia : Lookup and update based on fields other than the key