【问题标题】:How to add a column to all connected nodes - mnesia table如何向所有连接的节点添加一列 - mnesia 表
【发布时间】:2019-04-14 20:22:08
【问题描述】:

我正在尝试将新列添加到现有的 mnesia 表中。为此,我使用以下代码。

test()->

Transformer =
  fun(X)-> % when is_record(X, user) -> %previous users
      #userss{name = X#user.name,
           age = X#user.age,
           email = X#user.email,
          year = 1990}
end,
AF = mnesia:transform_table(user, Transformer,record_info(fields, userss),userss),

 mnesia:sync_transaction(AF).

我有两条记录

-record(user,{name,age,email}).
-record(users,{name,age,email,year}).

我想更新所有连接节点的表。但它失败了。

{aborted,{badarg,{aborted,{"Bad transform function",user,
                           #Fun<test.2.61379004>,'otherserver@192.168.169.1',
                           {badfun,#Fun<test.2.61379004>}}},
                 [],infinity,mnesia}}

这里有什么问题?

【问题讨论】:

    标签: erlang mnesia erl


    【解决方案1】:

    问题是匿名函数只能在定义它的模块被加载的节点上调用。我猜你只在集群中的一个节点上加载了包含test 函数的模块——你需要在所有节点上加载它才能工作。为此,您可以在 Erlang shell 中使用 nl 命令(“网络负载”)而不是 l

    nl(my_module).
    

    nl 和其他命令描述为here

    【讨论】:

    • 是的,这解决了我的问题。如果有多个版本的erlang,在最低版本运行nl(module).就完全解决了这个问题。
    猜你喜欢
    • 2019-04-10
    • 2021-09-15
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    相关资源
    最近更新 更多