如何向所有连接的节点添加列-Mnesia表

时间:2018-11-12 06:05:49

标签: erlang mnesia erl

我正在尝试将新列添加到现有的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}}

这是什么问题?

1 个答案:

答案 0 :(得分:1)

问题在于,只能在加载定义匿名函数的模块的节点上调用匿名函数。我想您仅在集群中的一个节点上加载了包含test函数的模块-您需要在所有节点上加载该模块才能正常工作。您可以在Erlang Shell中使用nl命令(“网络负载”)代替l

nl(my_module).

nl和其他命令在here中进行了描述。