代码之家  ›  专栏  ›  技术社区  ›  Sachith Muhandiram

如何将列添加到所有连接的节点-mnesia表

  •  0
  • Sachith Muhandiram  · 技术社区  · 7 年前

    我正在尝试向现有的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}}
    

    这里有什么问题?

    1 回复  |  直到 7 年前
        1
  •  1
  •   legoscia    7 年前

    问题是,匿名函数只能在加载了定义它的模块的节点上调用。我猜你装了包含 test 只在群集中的一个节点上运行—您需要将其加载到所有节点上,这样才能工作。你可以用 nl 命令(“网络加载”)而不是 l 在Erlang shell中:

    nl(my_module).
    

    荷兰 以及其他命令 here