如何向所有连接的节点添加一列 - mnesia table

How to add a column to all connected nodes - mnesia table

我正在尝试向现有的 mnesia 添加新列 table。为此,我使用以下代码。

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}).

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

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

这里有什么问题?

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

nl(my_module).

nl等命令说明here.