Итак, если вы хотите увидеть содержимое вашей таблицы, есть приложение под названием tv , которое может просматривать таблицы ETS и mnesia.
Если вы хотите увидеть все содержимое таблицы на вашем терминале, попробуйте что-то вроде этого:
traverse_table_and_show(Table_name)->
Iterator = fun(Rec,_)->
io:format("~p~n",[Rec]),
[]
end,
case mnesia:is_transaction() of
true -> mnesia:foldl(Iterator,[],Table_name);
false ->
Exec = fun({Fun,Tab}) -> mnesia:foldl(Fun, [],Tab) end,
mnesia:activity(transaction,Exec,[{Iterator,Table_name}],mnesia_frag)
end.
Тогда, если ваша таблица называется muppet
, вы используете функцию следующим образом:
traverse_table_and_show(muppet).
Преимущества этого:
Если он выполняется в рамках транзакции, он не будет иметь проблем с вложенными транзакциями.Это меньше работы, потому что она выполняется в одной транзакции mnesia с помощью функциональных возможностей итератора mnesia, по сравнению с вашей реализацией get_next_key -> do_read_with_key ->, а затем считывает запись (это много операций).При этом mnesia автоматически сообщит, что она охватывает все записи во всей вашей таблице.Кроме того, если таблица фрагментирована, ваша функциональность будет отображать записи только в первом фрагменте.Это будет перебирать все фрагменты, принадлежащие этой таблице.
В этом итерационном методе mnesia я ничего не делаю с переменной Accumulator, которая должна идти вместе с забавой Iterator
, и поэтому вы видите подчеркивание длявторая переменная.
Подробности этой итерации можно найти здесь: <b><a href="http://www.erlang.org/doc/man/mnesia.html#foldl-3" rel="nofollow noreferrer"><a href="http://www.erlang.org/doc/man/mnesia.html#foldl-3" rel="nofollow noreferrer">http://www.erlang.org/doc/man/mnesia.html#foldl-3</a></a></b>