0

私はこの記録を持っています:

-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().
4

1 に答える 1

1

スキーマを削除すると、person_backup を含むすべてのテーブルが削除されます。destroy で delete_schema を実行しないでください。すべて正常に動作します。

テーブルの作成を個別に行い、個別にリセットすることをお勧めします。リセットでは、代わりに mnesia:clear_table of person と counter を実行できます。なぜmnesiaを再開する必要があるのか​​ 疑問に思っています.

于 2013-02-18T17:09:31.113 に答える