如何向 mnesia 添加列 table

How to add a column to mnesia table

我正在尝试向现有的 mnesia 添加新列 table。为此,我使用以下代码。

test()->

Transformer =
  fun(X)->
      #users{name = X#user.name,
           age = X#user.age,
           email = X#user.email,
          year = 1990}
end,
{atomic, ok} = mnesia:transform_table(user, Transformer,record_info(fields, users),users).

我有两条记录

-record(user,{name,age,email}).
-record(users,{name,age,email,year}).

我的问题是,当我从 user table 中获取值时,它是

{atomic,[{users,sachith,28,sachith@so,1990}]}

为什么我从 user table 检索数据时得到 users 记录名称?

table名称和记录名称不一定相同。您从名为 user 的 table 开始,其中包含 user 条记录,然后将所有 user 条记录转换为 users 条记录。因此,当您从 table 读取时,它将 return users 记录,因为那是 table 现在包含的内容。

如果您查看 internal representation of record

-record(Name, {Field1,...,FieldN}).表示为{Name,Value1,...,ValueN}.

因此,基本上您是在 table 中将 {user,name,age,email} 转换为 {users,name,age,email,year}

但是有更好的迁移方法可以在您稍后更新记录时派上用场,

查看 this 生产代码库 transformer 函数的更好片段,


%%-record(user,{name,age,email}). // old
%%-record(user,{name,age,email,year}).  // new

Transformer =
  fun(X)->
      #user{name = element(2,X),
           age = element(3,X),
           email = element(4,X),
          year = 1990}
end,