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