如何向所有连接的节点添加一列 - mnesia 表
Posted
技术标签:
【中文标题】如何向所有连接的节点添加一列 - mnesia 表【英文标题】:How to add a column to all connected nodes - mnesia table 【发布时间】:2019-04-14 20:22:08 【问题描述】:我正在尝试将新列添加到现有的 mnesia 表中。为此,我使用以下代码。
test()->
Transformer =
fun(X)-> % when is_record(X, user) -> %previous users
#userssname = 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】:问题是匿名函数只能在定义它的模块被加载的节点上调用。我猜你只在集群中的一个节点上加载了包含test
函数的模块——你需要在所有节点上加载它才能工作。为此,您可以在 Erlang shell 中使用 nl
命令(“网络负载”)而不是 l
:
nl(my_module).
nl
和其他命令描述为here。
【讨论】:
是的,这解决了我的问题。如果有多个版本的erlang,在最低版本运行nl(module).
就完全解决了这个问题。以上是关于如何向所有连接的节点添加一列 - mnesia 表的主要内容,如果未能解决你的问题,请参考以下文章