如何向所有连接的节点添加一列 - 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.
我正在尝试向现有的 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.