在erlang中重置之前进行备份

时间:2013-02-18 16:15:31

标签: erlang

我有这个记录:

-record(person, {id, token, password, pin, key, salt, pin_salt, subscription_date, first_name, last_name, alias, gender, created_at, birth_year, birth_month, birth_date}).

我有这个功能,可以创建表 person_backup

testcreate()->      

    mnesia:create_table(person_backup,[{disc_copies, [node()]},{attributes, record_info(fields, person)},
    {record_name, person}]).

我有这个功能,可以将数据从表人转移到person_backup

testbackup()->

    mnesia:transaction(fun() ->
  Records = mnesia:select(person, [{'_', [], ['$_']}]),
  [ok = mnesia:write(person_backup, Record, write) || Record <- Records]
end).

我的目标是在我的主要功能中进行测试

check(Counter)->

if Counter =:= 40 ->
model:testbackup();
model:reset():
true-> io:format(" it not ok")
end.

但我的问题是当我这样做时:model:reset()

表person_backup将被删除

我的目标是在做模型之前:reset()我们应该将数据从person传输到person_backup

这是 reset(),destroy(),create()

的代码
reset() ->
    stop(),
    destroy(),
    create(),
    start(),

    {ok}.


destroy() ->
    mnesia:start(),
    mnesia:delete_table(counter),
    mnesia:delete_table(person),
    mnesia:stop(),
    mnesia:delete_schema([node()]).


create() ->
    mnesia:create_schema([node()]),
    mnesia:start(),
    mnesia:create_table(counter, [{attributes, record_info(fields, counter)}, {disc_copies, [node()]}]),
    mnesia:create_table(person, [{attributes, record_info(fields, person)}, {disc_copies, [node()]}]),
  mnesia:create_table(person_backup,[{disc_copies, [node()]},{attributes, record_info(fields, person)},
    {record_name, person}]),
    mnesia:stop().

1 个答案:

答案 0 :(得分:1)

删除架构时,将删除所有表,包括person_backup。不要在destroy中执行delete_schema,一切都会正常工作。

最好是将表的创建分开并重置分开。在重置时,您可以执行mnesia:clear_table of person和counter。我想知道为什么你需要重启mnesia。