我尝试了下面的代码片段:
print_next(Current) ->
case mnesia:dirty_next(muppet, Current) of
'$end_of_table' ->
io:format("~n", []),
ok;
Next ->
[Muppet] = mnesia:dirty_read({muppet, Next}),
io:format("~p~n", [Muppet]),
print_next(Next),
ok
end.
print() ->
case mnesia:dirty_first(muppet) of
'$end_of_table' ->
ok;
First ->
[Muppet] = mnesia:dirty_read({muppet, First}),
io:format("~p~n", [Muppet]),
print_next(First),
ok
end.
但是它太长了。我也可以使用dirty_all_keys
,然后遍历key list,但我想知道是否有更好的方法来打印Mnesia表内容。
发布于 2011-10-14 21:04:13
如果您只是想要一种快速而粗糙的方式来打印shell中的Mnesia表的内容,并且如果您的表不是disc_only_copies
类型,那么您可以利用Mnesia表将其数据存储在ETS表中这一事实并运行:
ets:tab2list(my_table).
或者,如果您认为shell截断数据太多:
rp(ets:tab2list(my_table)).
当然,对于“真正的”代码,不推荐这样做。
发布于 2014-10-05 23:05:57
要简单快速地查看表内容,您可以使用mnesia的select函数,并使用catch-all Match Specification,如下所示:
CatchAll = [{'_',[],['$_']}].
mnesia:dirty_select(TableName, CatchAll).
您还可以在事务上下文中运行它:
CatchAll = [{'_',[],['$_']}].
SelectFun = fun() -> mnesia:select(TableName, CatchAll) end.
mnesia:transaction(SelectFun).
但是,如果您处于具有大数据的生产环境中,则要小心。
发布于 2013-10-18 20:07:09
正如Muzaaya所说,你可以使用tv (表格可视化工具)来查看记忆和ets表格。或者,您可以使用以下代码在终端上或在您想要将结果存储在文件中的情况下获取mnesia表数据- Print:
select_all() ->
mnesia:transaction(
fun() ->
P=qlc:e(qlc:q([E || E <- mnesia:table(tableName)])), %query to select all data from table named 'tableName'
io:format(" ~p ~n ", [P]), % Prints table data on terminal
to_file("fileName.txt",P) % to_file method writes the data to file
end ).
to_file(File, L) ->
mnesia:transaction(
fun() ->
{ok, S} = file:open(File, write),
lists:foreach(fun(X) -> io:format(S, "~p.~n" ,[X]) end, L),
file:close(S)
end).
https://stackoverflow.com/questions/7763745
复制相似问题