如何向所有连接的节点添加一列 - 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 表的主要内容,如果未能解决你的问题,请参考以下文章

Flyway-在名称中包含指定后缀的所有表中添加一列

为啥添加一列时所有行都得到空值?

向熊猫数据框添加一列

在SQL数据库表中添加一列数值型(默认保留2位)的数字,该怎么写?

Prisma:如何在查询返回中添加一列?

如何在我的数据框中添加一列,说明每行来自哪个工作表名称? Python