erlang – 不能设置Mnesia

setup_mnesia(Name) ->
    ?VALUE(application:start(mnesia)),
    ?VALUE(mnesia:create_schema([node()|[Name]])),
    ?VALUE(mnesia:create_table(muppet, [
                        {attributes, record_info(fields, muppet)},
                        {disc_copies, [foo@kos13]}])),
    ?VALUE(mnesia:wait_for_tables([muppet], infinity)),
    ok.

结果是

“application : start ( mnesia )” = ok

“mnesia : create_schema ( [ node ( ) | [ Name ] ] )” = {error,
{foo@kos13,
{already_exists,
foo@kos13}}}

“mnesia : create_table ( muppet , [ { attributes , record_info (
fields , muppet ) } , { disc_copies , [ foo@kos13 ] } ] )” = {aborted,
{bad_type,
muppet,
disc_copies,
foo@kos13}}

已编辑,已添加
如果重写两个进程来调用应用程序:在mnesia:create_schema之后启动它吐出“无法安装回退”.在当前目录中出现两个文件–FALLBACK.BUP和foo @ kos13131851070846165246847780.

如果您的架构是ram_copies类型,则mnesia不允许任何其他表驻留在光盘上,您在ram_copies架构中创建的所有表也将位于RAM中.

另外,指定一个像这样的mnesia目录:

erl -name MY_NODE_NAME -mnesia dir '"./Databases/MY_NODE_NAME_DATABASE"'

其中,./ Databases / MY_NODE_NAME_DATABASE必须是现有文件夹.在此之后,您可以按照文档创建模式和表.

如果模式在RAM中,则可以执行的另一项操作是:mnesia:change_table_copy_type(Table_name,On_which_Node,To_new_type).将架构类型更改为disc_copies或disc_only_copies后,您可以将表的类型更改为光盘.如果模式通常是disc_copies类型,则可以使用任何性质的表,无论是RAM,Disc还是Disc_only_copies.

使用mnesia:delete_schema / 1可以摆脱不需要的模式,但要非常小心这个方法.

除此之外的任何事情,请参考mnesia users guide.

相关文章
相关标签/搜索