deleting records from mnesia
Serge Aleynikov
serge@REDACTED
Wed Jul 19 19:46:54 CEST 2006
Hmm... I was hoping there was a solution using mnesia:activity call that
wouldn't require patching. :-(
Can this function be exported in the future OTP release?
Serge
Ulf Wiger (TN/EAB) wrote:
> I tried with my slightly patched version:
>
> (tups1@REDACTED)2> mnesia:create_table(test,[]).
> {atomic,ok}
> (tups1@REDACTED)3> [mnesia:dirty_write({test,I,v}) || I <-
> lists:seq(1,10)].
> [ok,ok,ok,ok,ok,ok,ok,ok,ok,ok]
> (tups1@REDACTED)4> ets:tab2list(test).
> [{test,1,v},
> {test,10,v},
> {test,2,v},
> {test,3,v},
> {test,8,v},
> {test,4,v},
> {test,5,v},
> {test,7,v},
> {test,6,v},
> {test,9,v}]
> (tups1@REDACTED)5> mnesia_schema:schema_transaction(
> fun() -> mnesia_schema:do_clear_table(test),
> mnesia:write({test,1,a}) end).
> {atomic,ok}
> (tups1@REDACTED)6> ets:tab2list(test).
> [{test,1,a}]
>
>
> The only change that's required is that
> mnesia_schema:do_clear_table/1 is exported.
>
> BR,
> Ulf W
>
>
>> -----Original Message-----
>> From: owner-erlang-questions@REDACTED
>> [mailto:owner-erlang-questions@REDACTED] On Behalf Of Serge
>> Aleynikov
>> Sent: den 19 juli 2006 18:17
>> To: Erlang Users' List
>> Subject: deleting records from mnesia
>>
>> Hi,
>>
>> Is there a way to delete all records from a table in mnesia
>> within a transaction?
>>
>> This won't work because mnesia:clean_table/1 doesn't support nested
>> transactions:
>>
>> F = fun() ->
>> {atomic, ok} = mnesia:clear_table(Tab),
>> insert_records(Tab)
>> end,
>> mnesia:transaction(F).
>>
>> I know that I could do this:
>>
>> [mnesia:delete(Tab, Key, sticky_write) || Key <-
>> mnesia:all_keys(Tab)].
>>
>> but is there a way to truncate table in one shot within a
>> transaction instead of iterating over all records?
>>
>> Serge
>>
>
--
Serge Aleynikov
R&D Telecom, MIS, IDT Corp
Tel: +1 (973) 438-3436
Fax: +1 (973) 438-1464
More information about the erlang-questions
mailing list