【问题标题】:doing a backup before reset in erlang在erlang中重置之前进行备份
【发布时间】:2013-02-19 01:09:31
【问题描述】:

我有这个记录:

-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 传输到 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

我的目标是在执行 model: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().

【问题讨论】:

    标签: erlang


    【解决方案1】:

    当您删除架构时,所有表都将被删除,包括您的 person_backup。不要在destroy中做delete_schema,一切都会正常的。

    最好让您单独创建表并单独重置。在重置中,您可以改为执行 mnesia:clear_table of person 和 counter 。我想知道你为什么需要重新启动 mnesia。

    【讨论】:

    • 但是当我从销毁中删除 mnesia:delete_schema([node()]) 时,所有表中的所有数据都不会被删除
    • 这就是为什么你不应该删除你的架构,因为 person_backup 也会被删除。您需要为所有需要清除数据的表执行 clear_table 。或者其他方式是在不同的节点中创建一个模式并在那里有你的 person_backup。
    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 2013-06-10
    • 2011-05-23
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多