Erlang Mnesia-指定存储策略时,由于错误类型而中止
所以我得到了Erlang Mnesia-指定存储策略时,由于错误类型而中止,erlang,mnesia,Erlang,Mnesia,所以我得到了{aborted,{bad_type,link,disc_copies,'我的_server@127.0.0.1'}}(由myinit_db/0函数返回): 如果没有{disc_copies,[node()]}表是正确创建的 验证您通过应用程序:set_env/3指定的mnesia目录的父目录的写入权限。如果mnesia dir父目录不允许您写入,则会出现此错误。(获取此错误的另一种方法是忘记完全设置mnesia dir,但您的set_env调用显然正在这样做。) 更新:仔细查看您报
{aborted,{bad_type,link,disc_copies,'我的_server@127.0.0.1'}}
(由myinit_db/0
函数返回):
如果没有
{disc_copies,[node()]}
表是正确创建的 验证您通过应用程序:set_env/3
指定的mnesia目录的父目录的写入权限。如果mnesia dir父目录不允许您写入,则会出现此错误。(获取此错误的另一种方法是忘记完全设置mnesia dir,但您的set_env
调用显然正在这样做。)
更新:仔细查看您报告的错误,我发现错误中提到的节点不在列表中:
{中止,{类型错误,链接,光盘拷贝,'我的_server@127.0.0.1'}}
这可能意味着您在问题中显示的代码与实际运行的代码不匹配。具体来说,如果调用mnesia:create_table/2
传递一个节点,而不是disc\u copies
元组中的节点列表,如下所示,您将得到相同的准确错误:
mnesia:create_table(link,[{index,[timestamp]},
{attributes, record_info(fields, link)},
{disc_copies, node()}]). % note no list here, should be [node()]
您可能需要将
schema
表更改为disc\u copies
,这似乎会影响整个节点
mnesia:change_table_copy_type(模式,节点(),光盘副本)
从mnesia文档:
此函数还可用于更改名为schema的表的存储类型。架构表的存储类型只能是ram\U副本或磁盘\U副本。如果架构的存储类型为ram_copies,则该节点上不能有其他表驻留在磁盘上
在此之后,您应该能够在节点上创建
disc\u副本
表。谢谢您的回答。不幸的是,在确保访问权限正常后,我仍然会出现错误。@Update-您的说法不完全正确。错误表明没有节点列表,但只传递了一个节点,但与上面粘贴的代码完全相同。对我来说这看起来很可疑,所以我甚至在绝望中试图传递{disc\u copies,[[node()]]}
,得到{aborted,{bad\u type,link,['my]_server@127.0.0.1']}}
mnesia:create_table(link,[{index,[timestamp]},
{attributes, record_info(fields, link)},
{disc_copies, node()}]). % note no list here, should be [node()]