开发者

Create several Mnesia tables with the same columns

I want to create the following schema in Mnesia. Have three tables, called t1, t2 and t3, each of them storing elements of the following record:

-record(pe, {pid, event}).

I tried creating the tables with:

Attrs = record_info(fields, pe),
Tbls = [t1, t2, t3],
[mnesia:create_table(Tbl, [{attributes, Attrs}]) || Tbl <- Tbls],

and then write some content using the following line (P and E have values):

mnesia:write(t1, #pe{pid=P, event=E}, write)

but I got a bad type error. (Relevant commands were passed to transactions, so it's not a sync problem.)

All the textbook examples of Mnesia show how to create different tables for different records. Can开发者_开发知识库 someone please reply with an example for creating different tables for the same record?


regarding your "DDT" for creating the tables, I don't see any mystake at first sight, just remember that using tables with names different from the record names makes you lose the "simple" commands (like mnesia:write/1) because they use element(1, RecordTuple) to retrieve table name.

When defining tables, you can use option {record_name, RecordName} (in your case: {record_name, pe}) to tell mnesia that first atom in tuple representing records in table is not the table name, but instead the atom you passed with record_name; so in case of your table t1 it makes mnesia expecting 'pe' records when inserting or looking up for records.

If you want to insert a record in all tables, you might use a script similar to the one used to create table (but in a function wrapper for mnesia transaction context):

insert_record_in_all_tables(Pid, Event, Tables) ->
    mnesia:transaction(fun() -> [mnesia:write(T, #pe{pid=Pid, event=Event}, write) ||  T <- Tables] end).

Hope this helps!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜