我正在尝试将新列添加到现有的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}}
这是什么问题?
答案 0 :(得分:1)
问题在于,只能在加载定义匿名函数的模块的节点上调用匿名函数。我想您仅在集群中的一个节点上加载了包含test
函数的模块-您需要在所有节点上加载该模块才能正常工作。您可以在Erlang Shell中使用nl
命令(“网络负载”)代替l
:
nl(my_module).
nl
和其他命令在here中进行了描述。